#include "trx_filter.h"

__m128 kernel[MAXIMUM_FILTER_LENGTH] __attribute__ ((aligned (16)));

__m256 tx_kernel_mm256[MAXIMUM_FILTER_LENGTH] __attribute__ ((aligned (32)));

__m256 rx_kernel_mm256[MAXIMUM_FILTER_LENGTH] __attribute__ ((aligned (32)));

__m256 tx_signal_block[MAX_SIGNAL_BLK_LEN] __attribute__ ((aligned (32)));

__m256 rx_signal_block[MAX_SIGNAL_BLK_LEN] __attribute__ ((aligned (32)));

__attribute__ ((aligned (32))) cf_t *input_tmp = NULL;

__attribute__ ((aligned (32))) cf_t *output_tmp = NULL;

__attribute__ ((aligned (32))) const float *trx_filter_coeffs = NULL;

uint32_t trx_filter_length = 0;

float trx_filter_coeffs_512[NUMBER_OF_FILTERS][513] __attribute__ ((aligned (32))) = {
// Filter coeffs for 1.4 MHz, i.e, 6 RBs.
  {-0.00000000000000000000e+00,	-5.94293417425558290036e-09,	1.53024368856238612983e-08,	6.38944449403016100511e-08,	-1.43564507513214550040e-07,
-9.97563656859842541643e-08,	4.58197951600613320308e-07,	-9.81742710824921614046e-08,	-8.54914983364615596262e-07,	7.34081450835748071409e-07,
1.01048823558916911320e-06,	-1.81681226168135862024e-06,	-4.84954301812623235658e-07,	3.01988692703107996268e-06,	-1.05243604107341663835e-06,
-3.68333978749392139688e-06,	3.55835073391748787946e-06,	3.00331223560608100409e-06,	-6.43581984803658533017e-06,	-3.77099129780877952347e-07,
8.55614954017017807233e-06,	-4.20849223545632832792e-06,	-8.53843703198879453310e-06,	9.90645797067966404415e-06,	5.24626922643223077947e-06,
-1.50102798751870503282e-05,	1.64001218641176804195e-06,	1.73088333436282863927e-05,	-1.11843972628399030832e-05,	-1.47594136635590567768e-05,
2.10999428876759149542e-05,	6.31139542443564827449e-06,	-2.81298780082606952207e-05,	7.38463617797857444918e-06,	2.88945846535351372067e-05,
-2.36696998644738794339e-05,	-2.10239356827272066345e-05,	3.81832902987869454280e-05,	4.25232619639367516505e-06,	-4.58314955288470428536e-05,
1.89062794752323664628e-05,	4.22488397384689591606e-05,	-4.32283734071827312217e-05,	-2.53850081556328040103e-05,	6.17437920944773787528e-05,
-3.27119805328570478997e-06,	-6.74791894022254933310e-05,	3.83012021789004504556e-05,	5.55967829037300260617e-05,	-7.10985873110395123807e-05,
-2.53421941332021715310e-05,	9.17456713349554372951e-05,	-1.88377859243697252792e-05,	-9.16756651405602706034e-05,	6.75106146336544333262e-05,
6.64665360108840851897e-05,	-1.07995711516887602367e-04,	-1.79552616577463766267e-05,	1.27389042392981103029e-04,	-4.50776251052881319096e-05,
-1.16215082063634314547e-04,	1.08107787842324948075e-04,	7.17501992126857855063e-05,	-1.53928228481114976042e-04,	4.85329911896868022673e-19,
1.67003331067478865031e-04,	-8.44603683550034829578e-05,	-1.38083617081520863487e-04,	1.61083691596771756563e-04,	6.78139472884775953987e-05,
-2.08037010378374375742e-04,	3.18382559912677571526e-05,	2.07983389425258984561e-04,	-1.39066618365334929326e-04,	-1.53511391844384442002e-04,
2.26642141643280481487e-04,	5.06550487330324295063e-05,	-2.68467962708352912878e-04,	8.07407862073078913838e-05,	2.46774557807801419793e-04,
-2.10353737350287283174e-04,	-1.58076498748991375182e-04,	3.04015659654358679376e-04,	1.61007395543618643085e-05,	-3.32286700171903199956e-04,
1.49510921152641113258e-04,	2.78910437518378349561e-04,	-2.98927580139360426006e-04,	-1.46858915749905737796e-04,	3.91312568641517875660e-04,
-3.99587094313771278367e-05,	-3.95441870983842134937e-04,	2.40319873121021650641e-04,	2.99104270070689839175e-04,	-4.04331784453697002778e-04,
-1.14639187292107046483e-04,	4.85404354030992337288e-04,	-1.21312556603362690856e-04,	-4.52781101718335984505e-04,	3.54454890683852279817e-04,
3.01391714556179012366e-04,	-5.24865449435735057816e-04,	-5.61340144394787890622e-05,	5.81860076643328960784e-04,	-2.31159220681530084207e-04,
-4.98120408985555716656e-04,	4.92081676876710829779e-04,	2.79319619407326794145e-04,	-6.57438382072961799776e-04,	3.37415086145867004590e-05,
6.74931683254271011507e-04,	-3.71835349567321100592e-04,	-5.24364425421513700130e-04,	6.52032154397320755368e-04,	2.26172236976810315384e-04,
-7.97470579502742443756e-04,	1.59597212934582086434e-04,	7.57590471627609188254e-04,	-5.44556842436097737065e-04,	-5.23671009029388315366e-04,
8.31626864530405946092e-04,	1.35223345598842556057e-04,	-9.38839222306643702773e-04,	3.25290282481793813218e-04,	8.21610752897564567548e-04,
-7.49183593008107841758e-04,	-4.87649802264231223108e-04,	1.02653847016862323493e-03,	-2.11829225544503233341e-18,	-1.07387212216004078458e-03,
5.33661023827896956705e-04,	8.57691876511156676630e-04,	-9.84017978891079314260e-04,	-4.07580060967174340279e-04,	1.23069887547457728662e-03,
-1.85458864839672639760e-04,	-1.19338115175237572535e-03,	7.86296159879639930922e-04,	8.55604079692677847377e-04,	-1.24564425611504558250e-03,
-2.74628428744928571471e-04,	1.43624715298054064956e-03,	-4.26368099884811787605e-04,	-1.28672236359669324435e-03,	1.08333303269985033179e-03,
8.04336701170883837733e-04,	-1.52881182851230101177e-03,	-8.00418965758005826342e-05,	1.63350835107779735443e-03,	-7.27007881909010229837e-04,
-1.34186061449765399109e-03,	1.42331658081612413662e-03,	6.92218337568362238749e-04,	-1.82635947988961920042e-03,	1.84715858619897873834e-04,
1.81098349455604428794e-03,	-1.09060592312072365817e-03,	-1.34540424396008013314e-03,	1.80311877613821796955e-03,	5.06965903654194396423e-04,
-2.12916936463681183075e-03,	5.27926822113988607199e-04,	1.95531703050754812959e-03,	-1.51932017512294717868e-03,	-1.28255714848341233897e-03,
2.21792746342160118633e-03,	2.35600137060651112011e-04,	-2.42612741622057594484e-03,	9.57738322899991112447e-04,	2.05118633794156837377e-03,
-2.01436087314606389331e-03,	-1.13690640529796036830e-03,	2.66130837142113151408e-03,	-1.35867343591358779881e-04,	-2.70404794051012009257e-03,
1.48252773517280412099e-03,	2.08102211221321926546e-03,	-2.57630802476068506562e-03,	-8.89913233000896451881e-04,	3.12534061488140392851e-03,
-6.23128379595263670425e-04,	-2.94748843807943455148e-03,	2.11165394388589024860e-03,	2.02440469909053420705e-03,	-3.20571466014764761693e-03,
-5.19882113330989714672e-04,	3.60082245284693664919e-03,	-1.24491744712971726464e-03,	-3.13832298864877940955e-03,	2.85684337229623460871e-03,
1.85685977860829067206e-03,	-3.90415625201147482859e-03,	4.02437741846933124042e-18,	4.07754059213123656175e-03,	-2.02548211718573019369e-03,
-3.25482883047577015861e-03,	3.73467794667880093745e-03,	1.54752780797038583943e-03,	-4.67603654569808888097e-03,	7.05346693965295200822e-04,
4.54459310447588842735e-03,	-2.99915105796686679712e-03,	-3.26979804385984888782e-03,	4.77113624560556066900e-03,	1.05463302793033244197e-03,
-5.53179945385640688821e-03,	1.64763823276318360778e-03,	4.99075323037044722707e-03,	-4.21907801899725366096e-03,	-3.14662155580342243685e-03,
6.01029017134561971414e-03,	3.16362347592778552722e-04,	-6.49402740728188040270e-03,	2.90847449871728955598e-03,	5.40485912016490897825e-03,
-5.77506556194761367512e-03,	-2.83084140773632144186e-03,	7.53227590456622721204e-03,	-7.68732153398906368526e-04,	-7.61015791770893335749e-03,
4.63071444558776565414e-03,	5.77621303447879621412e-03,	-7.83343886455806735769e-03,	-2.23044710493573760182e-03,	9.49462030637436039948e-03,
-2.38829792527700058083e-03,	-8.98253615018904279232e-03,	7.09491221309073438750e-03,	6.09497277689804908135e-03,	-1.07388369461008555128e-02,
-1.16374608098116405670e-03,	1.22425607715381263435e-02,	-4.94465108727993370857e-03,	-1.08526503914274097262e-02,	1.09417596853832680553e-02,
6.35251820906744448653e-03,	-1.53294231936531976518e-02,	8.08709686391927574239e-04,	1.66760138935613221045e-02,	-9.50102123656622332692e-03,
-1.39054174257686510158e-02,	1.80172186007514258110e-02,	6.54177660592152390717e-03,	-2.42696675598103803195e-02,	5.14134321889551503676e-03,
2.60162536548756602450e-02,	-2.01022815271180363417e-02,	-2.09915537015544009791e-02,	3.66538183924841401429e-02,	6.65749230872705530238e-03,
-5.27103688137820075577e-02,	2.14228597948827384490e-02,	6.61184319641003465096e-02,	-7.85853935206518999790e-02,	-7.50115630527614651868e-02,
3.08756586801580079626e-01,	5.78124997869470580447e-01,	3.08756586801580079626e-01,	-7.50115630527614651868e-02,	-7.85853935206518999790e-02,
6.61184319641003465096e-02,	2.14228597948827384490e-02,	-5.27103688137820075577e-02,	6.65749230872705530238e-03,	3.66538183924841401429e-02,
-2.09915537015544009791e-02,	-2.01022815271180363417e-02,	2.60162536548756602450e-02,	5.14134321889551503676e-03,	-2.42696675598103803195e-02,
6.54177660592152390717e-03,	1.80172186007514258110e-02,	-1.39054174257686510158e-02,	-9.50102123656622332692e-03,	1.66760138935613221045e-02,
8.08709686391927574239e-04,	-1.53294231936531976518e-02,	6.35251820906744448653e-03,	1.09417596853832680553e-02,	-1.08526503914274097262e-02,
-4.94465108727993370857e-03,	1.22425607715381263435e-02,	-1.16374608098116405670e-03,	-1.07388369461008555128e-02,	6.09497277689804908135e-03,
7.09491221309073438750e-03,	-8.98253615018904279232e-03,	-2.38829792527700058083e-03,	9.49462030637436039948e-03,	-2.23044710493573760182e-03,
-7.83343886455806735769e-03,	5.77621303447879621412e-03,	4.63071444558776565414e-03,	-7.61015791770893335749e-03,	-7.68732153398906368526e-04,
7.53227590456622721204e-03,	-2.83084140773632144186e-03,	-5.77506556194761367512e-03,	5.40485912016490897825e-03,	2.90847449871728955598e-03,
-6.49402740728188040270e-03,	3.16362347592778552722e-04,	6.01029017134561971414e-03,	-3.14662155580342243685e-03,	-4.21907801899725366096e-03,
4.99075323037044722707e-03,	1.64763823276318360778e-03,	-5.53179945385640688821e-03,	1.05463302793033244197e-03,	4.77113624560556066900e-03,
-3.26979804385984888782e-03,	-2.99915105796686679712e-03,	4.54459310447588842735e-03,	7.05346693965295200822e-04,	-4.67603654569808888097e-03,
1.54752780797038583943e-03,	3.73467794667880093745e-03,	-3.25482883047577015861e-03,	-2.02548211718573019369e-03,	4.07754059213123656175e-03,
4.02437741846933124042e-18,	-3.90415625201147482859e-03,	1.85685977860829067206e-03,	2.85684337229623460871e-03,	-3.13832298864877940955e-03,
-1.24491744712971726464e-03,	3.60082245284693664919e-03,	-5.19882113330989714672e-04,	-3.20571466014764761693e-03,	2.02440469909053420705e-03,
2.11165394388589024860e-03,	-2.94748843807943455148e-03,	-6.23128379595263670425e-04,	3.12534061488140392851e-03,	-8.89913233000896451881e-04,
-2.57630802476068506562e-03,	2.08102211221321926546e-03,	1.48252773517280412099e-03,	-2.70404794051012009257e-03,	-1.35867343591358779881e-04,
2.66130837142113151408e-03,	-1.13690640529796036830e-03,	-2.01436087314606389331e-03,	2.05118633794156837377e-03,	9.57738322899991112447e-04,
-2.42612741622057594484e-03,	2.35600137060651112011e-04,	2.21792746342160118633e-03,	-1.28255714848341233897e-03,	-1.51932017512294717868e-03,
1.95531703050754812959e-03,	5.27926822113988607199e-04,	-2.12916936463681183075e-03,	5.06965903654194396423e-04,	1.80311877613821796955e-03,
-1.34540424396008013314e-03,	-1.09060592312072365817e-03,	1.81098349455604428794e-03,	1.84715858619897873834e-04,	-1.82635947988961920042e-03,
6.92218337568362238749e-04,	1.42331658081612413662e-03,	-1.34186061449765399109e-03,	-7.27007881909010229837e-04,	1.63350835107779735443e-03,
-8.00418965758005826342e-05,	-1.52881182851230101177e-03,	8.04336701170883837733e-04,	1.08333303269985033179e-03,	-1.28672236359669324435e-03,
-4.26368099884811787605e-04,	1.43624715298054064956e-03,	-2.74628428744928571471e-04,	-1.24564425611504558250e-03,	8.55604079692677847377e-04,
7.86296159879639930922e-04,	-1.19338115175237572535e-03,	-1.85458864839672639760e-04,	1.23069887547457728662e-03,	-4.07580060967174340279e-04,
-9.84017978891079314260e-04,	8.57691876511156676630e-04,	5.33661023827896956705e-04,	-1.07387212216004078458e-03,	-2.11829225544503233341e-18,
1.02653847016862323493e-03,	-4.87649802264231223108e-04,	-7.49183593008107841758e-04,	8.21610752897564567548e-04,	3.25290282481793813218e-04,
-9.38839222306643702773e-04,	1.35223345598842556057e-04,	8.31626864530405946092e-04,	-5.23671009029388315366e-04,	-5.44556842436097737065e-04,
7.57590471627609188254e-04,	1.59597212934582086434e-04,	-7.97470579502742443756e-04,	2.26172236976810315384e-04,	6.52032154397320755368e-04,
-5.24364425421513700130e-04,	-3.71835349567321100592e-04,	6.74931683254271011507e-04,	3.37415086145867004590e-05,	-6.57438382072961799776e-04,
2.79319619407326794145e-04,	4.92081676876710829779e-04,	-4.98120408985555716656e-04,	-2.31159220681530084207e-04,	5.81860076643328960784e-04,
-5.61340144394787890622e-05,	-5.24865449435735057816e-04,	3.01391714556179012366e-04,	3.54454890683852279817e-04,	-4.52781101718335984505e-04,
-1.21312556603362690856e-04,	4.85404354030992337288e-04,	-1.14639187292107046483e-04,	-4.04331784453697002778e-04,	2.99104270070689839175e-04,
2.40319873121021650641e-04,	-3.95441870983842134937e-04,	-3.99587094313771278367e-05,	3.91312568641517875660e-04,	-1.46858915749905737796e-04,
-2.98927580139360426006e-04,	2.78910437518378349561e-04,	1.49510921152641113258e-04,	-3.32286700171903199956e-04,	1.61007395543618643085e-05,
3.04015659654358679376e-04,	-1.58076498748991375182e-04,	-2.10353737350287283174e-04,	2.46774557807801419793e-04,	8.07407862073078913838e-05,
-2.68467962708352912878e-04,	5.06550487330324295063e-05,	2.26642141643280481487e-04,	-1.53511391844384442002e-04,	-1.39066618365334929326e-04,
2.07983389425258984561e-04,	3.18382559912677571526e-05,	-2.08037010378374375742e-04,	6.78139472884775953987e-05,	1.61083691596771756563e-04,
-1.38083617081520863487e-04,	-8.44603683550034829578e-05,	1.67003331067478865031e-04,	4.85329911896868022673e-19,	-1.53928228481114976042e-04,
7.17501992126857855063e-05,	1.08107787842324948075e-04,	-1.16215082063634314547e-04,	-4.50776251052881319096e-05,	1.27389042392981103029e-04,
-1.79552616577463766267e-05,	-1.07995711516887602367e-04,	6.64665360108840851897e-05,	6.75106146336544333262e-05,	-9.16756651405602706034e-05,
-1.88377859243697252792e-05,	9.17456713349554372951e-05,	-2.53421941332021715310e-05,	-7.10985873110395123807e-05,	5.55967829037300260617e-05,
3.83012021789004504556e-05,	-6.74791894022254933310e-05,	-3.27119805328570478997e-06,	6.17437920944773787528e-05,	-2.53850081556328040103e-05,
-4.32283734071827312217e-05,	4.22488397384689591606e-05,	1.89062794752323664628e-05,	-4.58314955288470428536e-05,	4.25232619639367516505e-06,
3.81832902987869454280e-05,	-2.10239356827272066345e-05,	-2.36696998644738794339e-05,	2.88945846535351372067e-05,	7.38463617797857444918e-06,
-2.81298780082606952207e-05,	6.31139542443564827449e-06,	2.10999428876759149542e-05,	-1.47594136635590567768e-05,	-1.11843972628399030832e-05,
1.73088333436282863927e-05,	1.64001218641176804195e-06,	-1.50102798751870503282e-05,	5.24626922643223077947e-06,	9.90645797067966404415e-06,
-8.53843703198879453310e-06,	-4.20849223545632832792e-06,	8.55614954017017807233e-06,	-3.77099129780877952347e-07,	-6.43581984803658533017e-06,
3.00331223560608100409e-06,	3.55835073391748787946e-06,	-3.68333978749392139688e-06,	-1.05243604107341663835e-06,	3.01988692703107996268e-06,
-4.84954301812623235658e-07,	-1.81681226168135862024e-06,	1.01048823558916911320e-06,	7.34081450835748071409e-07,	-8.54914983364615596262e-07,
-9.81742710824921614046e-08,	4.58197951600613320308e-07,	-9.97563656859842541643e-08,	-1.43564507513214550040e-07,	6.38944449403016100511e-08,
1.53024368856238612983e-08,	-5.94293417425558290036e-09,	-0.00000000000000000000e+00},
// Filter coeffs for 3 MHz, i.e., 15 RBs.
  {-0.00000000000000000000e+00,	-4.82983503874297970980e-09,	3.14890640928293504536e-08,	-3.49451778821558497613e-08,	-8.13930413103165647524e-08,
2.91750303564111967816e-07,	-3.41144994954467118793e-07,	-4.92205007193716889789e-08,	7.69403159384851343911e-07,	-1.17010548874235241156e-06,
5.36612291976711346790e-07,	1.07522317480708188551e-06,	-2.47382397181436602094e-06,	2.08484576894840408867e-06,	5.31975856986163223020e-07,
-3.73641033077100233396e-06,	4.64920929436531973710e-06,	-1.55809650615897218943e-06,	-4.00632439860718102612e-06,	7.68297174264196388921e-06,
-5.53430391544287330659e-06,	-2.15664807649240962122e-06,	9.98518925447251468888e-06,	-1.10166907919041128714e-05,	2.67452486382588598368e-06,
9.91158514242773024594e-06,	-1.67117375359950484756e-05,	1.05853442359444973822e-05,	5.84383209056902741942e-06,	-2.05051642771505284520e-05,
2.05211343146924406287e-05,	-3.17960986456776301926e-06,	-1.98908275337553348827e-05,	3.01633668014301200167e-05,	-1.68436638203504859574e-05,
-1.26848245462504650749e-05,	3.62126170833852091698e-05,	-3.31562584077417705532e-05,	2.12872724768803204837e-06,	3.50837424701660533432e-05,
-4.84551958242321513396e-05,	2.36496251653905383342e-05,	2.39097817990228664125e-05,	-5.79298597048483944363e-05,	4.86636553069401387220e-05,
1.63609179020208931880e-06,	-5.66386338120534955963e-05,	7.18023438752144919439e-05,	-3.00887621489341436528e-05,	-4.08571718581856129751e-05,
8.63562742451436685066e-05,	-6.65266692585855958344e-05,	-9.46446697659455045946e-06,	8.56785730607776796052e-05,	-1.00196865667211281749e-04,
3.49997701508900302685e-05,	6.49426690627289690061e-05,	-1.22037437697000223291e-04,	8.59631885903338233308e-05,	2.28755952926167351285e-05,
-1.23266744569342537015e-04,	1.33386928139425870246e-04,	-3.69834472452726988750e-05,	-9.76272761553259886460e-05,	1.65334727253454885458e-04,
-1.05920015333544535697e-04,	-4.35348697515631835055e-05,	1.70372087677429269329e-04,	-1.70857877598651282424e-04,	3.44136233828452870040e-05,
1.40385110218160314485e-04,	-2.16396689504051313634e-04,	1.25069748050846694162e-04,	7.32293266742738130750e-05,	-2.27836176436640774814e-04,
2.11816028404724189874e-04,	-2.54500734776759313387e-05,	-1.94671629753711411537e-04,	2.75132983349365620434e-04,	-1.41810279217972689614e-04,
-1.13842622535031851049e-04,	2.96342215806972989270e-04,	-2.55175436646923596996e-04,	8.05279514479269278480e-06,	2.61893299580668779090e-04,
-3.41191408472849423521e-04,	1.54266449947594526436e-04,	1.67330635957214934623e-04,	-3.76386984574057683727e-04,	2.99547488580573456705e-04,
2.00034497873488912407e-05,	-3.43379859540216610548e-04,	4.13938268942155634597e-04,	-1.60292914933664125930e-04,	-2.35699136391176260717e-04,
4.68256495346675851669e-04,	-3.43232711045866184778e-04,	-6.11158984237219468421e-05,	4.40360519124605436381e-04,	-4.92442039229305729593e-04,
1.57476753727904696502e-04,	3.20985322900219885618e-04,	-5.72006064300578762234e-04,	3.84213734759424746512e-04,	1.17843949010553006415e-04,
-5.53945571582962516255e-04,	5.75459964612238345991e-04,	-1.43137752482049783161e-04,	-4.25245467600400821762e-04,	6.87445387080537180860e-04,
-4.20147756441587808679e-04,	-1.92905470220006592264e-04,	6.85115139737861394108e-04,	-6.61426807800065234832e-04,	1.14323497957688304037e-04,
5.50551462260075522015e-04,	-8.14129103951769092160e-04,	4.48356084603550742590e-04,	2.89182877186851174794e-04,	-8.34717075690952865427e-04,
7.48444406110157782648e-04,	-6.77953674209631177057e-05,	-6.98999855058347863666e-04,	9.51353209470858895286e-04,	-4.65807316236823180326e-04,
-4.09743819646897456613e-04,	1.00347650463317302968e-03,	-8.34269962692164488392e-04,	1.59086322649948686606e-17,	8.72738120709139479809e-04,
-1.09815752280277264055e-03,	4.69089217705302360950e-04,	5.57883124410868012563e-04,	-1.19202023546210577470e-03,	9.16299953322832001941e-04,
9.29813696562068993856e-05,	-1.07401466388498375085e-03,	1.25333428791148419543e-03,	-4.54362208344471813111e-04,	-7.37195361341796279175e-04,
1.40092043277392254430e-03,	-9.91545005626837680848e-04,	-2.15516693153640945084e-04,	1.30526180302468542728e-03,	-1.41544282201096238184e-03,
4.17284020293264489802e-04,	9.51691668516301404572e-04,	-1.63076385240310331448e-03,	1.05658878691113002242e-03,	3.72556265377970970230e-04,
-1.56922539086300260117e-03,	1.58282997982228863278e-03,	-3.52889848979803832148e-04,	-1.20598134319461537146e-03,	1.88225610368526665578e-03,
-1.10752026522606926429e-03,	-5.69840085426255647631e-04,	1.86916199182700381622e-03,	-1.75365605430563521391e-03,	2.55403707081428097553e-04,
1.50555009906943714632e-03,	-2.15637575040270295518e-03,	1.13982267331345313993e-03,	8.14218598518856562750e-04,	-2.20913684319089167335e-03,
1.92592559549982261964e-03,	-1.17942135235383916271e-04,	-1.85718638434821171380e-03,	2.45460234761093239880e-03,	-1.14819219502771178130e-03,
-1.11415084920614849279e-03,	2.59447734476461484149e-03,	-2.09752250160050819280e-03,	-6.79541384488725449045e-05,	2.26964168463671730341e-03,
-2.77925914043678596796e-03,	1.12624105372198697606e-03,	1.48048876508316074388e-03,	-3.03247583060389834866e-03,	2.26624862384563596079e-03,
3.13071716311976745977e-04,	-2.75467435224590207615e-03,	3.13404207174416580758e-03,	-1.06600559338537910492e-03,	-1.92774012374508346007e-03,
3.53350913090386001617e-03,	-2.42986503218615848901e-03,	-6.31759717304131423327e-04,	3.32874917221189295380e-03,	-3.52486688712805350601e-03,
9.57113379719795966984e-04,	2.47616791494110468838e-03,	-4.11288894340173984826e-03,	2.58613501467919084525e-03,	1.04402931070795581235e-03,
-4.01591437566014772265e-03,	3.96128957040133358736e-03,	-7.85325752111393584655e-04,	-3.15542847235715084170e-03,	4.79406565386565272635e-03,
-2.73286783209524680727e-03,	-1.57928491503524486700e-03,	4.85291856898936290604e-03,	-4.45902568337275088950e-03,	5.29867974153222010859e-04,
4.01122131776592439484e-03,	-5.61450592389181862146e-03,	2.86796222185131070154e-03,	2.28334857470452673792e-03,	-5.89889586075279751670e-03,
5.04473493434997970197e-03,	-1.58228829681077262821e-04,	-5.11829773620349742086e-03,	6.63728444099140595797e-03,	-2.98944864291699656869e-03,
-3.23270737589614670301e-03,	7.25520718864397940601e-03,	-5.76591326555573723683e-03,	-3.84829621608324110894e-04,	6.60824042320134943246e-03,
-7.97616067567884223788e-03,	3.09552927597984278707e-03,	4.56638544467651875947e-03,	-9.11050897239832485619e-03,	6.71371041698552543930e-03,
1.20319757075157754422e-03,	-8.73612937276116614804e-03,	9.85691869458079836241e-03,	-3.18461484045496137640e-03,	-6.56741465536138293441e-03,
1.18585820428910408697e-02,	-8.08400539213333449440e-03,	-2.52076126959795187091e-03,	1.20689245327500211530e-02,	-1.27957307439510951236e-02,
3.25535736077773056249e-03,	9.91540486802047586756e-03,	-1.64765526564784464680e-02,	1.03808874255036358986e-02,	4.92906059454257128999e-03,
-1.81683034563423530250e-02,	1.82768154977665034377e-02,	-3.30667810710755282269e-03,	-1.67551020778107240261e-02,	2.62267559122342473754e-02,
-1.53969011776139436815e-02,	-1.06751676905329183354e-02,	3.34599548530430043747e-02,	-3.29875651070062961279e-02,	3.33779004781719094638e-03,
3.92447815190143378672e-02,	-6.26539048950758570289e-02,	3.74854506691506134120e-02,	4.29799579303660195251e-02,	-1.54357370288582429474e-01,
2.50927124153075775670e-01,	7.10937498815588875267e-01,	2.50927124153075775670e-01,	-1.54357370288582429474e-01,	4.29799579303660195251e-02,
3.74854506691506134120e-02,	-6.26539048950758570289e-02,	3.92447815190143378672e-02,	3.33779004781719094638e-03,	-3.29875651070062961279e-02,
3.34599548530430043747e-02,	-1.06751676905329183354e-02,	-1.53969011776139436815e-02,	2.62267559122342473754e-02,	-1.67551020778107240261e-02,
-3.30667810710755282269e-03,	1.82768154977665034377e-02,	-1.81683034563423530250e-02,	4.92906059454257128999e-03,	1.03808874255036358986e-02,
-1.64765526564784464680e-02,	9.91540486802047586756e-03,	3.25535736077773056249e-03,	-1.27957307439510951236e-02,	1.20689245327500211530e-02,
-2.52076126959795187091e-03,	-8.08400539213333449440e-03,	1.18585820428910408697e-02,	-6.56741465536138293441e-03,	-3.18461484045496137640e-03,
9.85691869458079836241e-03,	-8.73612937276116614804e-03,	1.20319757075157754422e-03,	6.71371041698552543930e-03,	-9.11050897239832485619e-03,
4.56638544467651875947e-03,	3.09552927597984278707e-03,	-7.97616067567884223788e-03,	6.60824042320134943246e-03,	-3.84829621608324110894e-04,
-5.76591326555573723683e-03,	7.25520718864397940601e-03,	-3.23270737589614670301e-03,	-2.98944864291699656869e-03,	6.63728444099140595797e-03,
-5.11829773620349742086e-03,	-1.58228829681077262821e-04,	5.04473493434997970197e-03,	-5.89889586075279751670e-03,	2.28334857470452673792e-03,
2.86796222185131070154e-03,	-5.61450592389181862146e-03,	4.01122131776592439484e-03,	5.29867974153222010859e-04,	-4.45902568337275088950e-03,
4.85291856898936290604e-03,	-1.57928491503524486700e-03,	-2.73286783209524680727e-03,	4.79406565386565272635e-03,	-3.15542847235715084170e-03,
-7.85325752111393584655e-04,	3.96128957040133358736e-03,	-4.01591437566014772265e-03,	1.04402931070795581235e-03,	2.58613501467919084525e-03,
-4.11288894340173984826e-03,	2.47616791494110468838e-03,	9.57113379719795966984e-04,	-3.52486688712805350601e-03,	3.32874917221189295380e-03,
-6.31759717304131423327e-04,	-2.42986503218615848901e-03,	3.53350913090386001617e-03,	-1.92774012374508346007e-03,	-1.06600559338537910492e-03,
3.13404207174416580758e-03,	-2.75467435224590207615e-03,	3.13071716311976745977e-04,	2.26624862384563596079e-03,	-3.03247583060389834866e-03,
1.48048876508316074388e-03,	1.12624105372198697606e-03,	-2.77925914043678596796e-03,	2.26964168463671730341e-03,	-6.79541384488725449045e-05,
-2.09752250160050819280e-03,	2.59447734476461484149e-03,	-1.11415084920614849279e-03,	-1.14819219502771178130e-03,	2.45460234761093239880e-03,
-1.85718638434821171380e-03,	-1.17942135235383916271e-04,	1.92592559549982261964e-03,	-2.20913684319089167335e-03,	8.14218598518856562750e-04,
1.13982267331345313993e-03,	-2.15637575040270295518e-03,	1.50555009906943714632e-03,	2.55403707081428097553e-04,	-1.75365605430563521391e-03,
1.86916199182700381622e-03,	-5.69840085426255647631e-04,	-1.10752026522606926429e-03,	1.88225610368526665578e-03,	-1.20598134319461537146e-03,
-3.52889848979803832148e-04,	1.58282997982228863278e-03,	-1.56922539086300260117e-03,	3.72556265377970970230e-04,	1.05658878691113002242e-03,
-1.63076385240310331448e-03,	9.51691668516301404572e-04,	4.17284020293264489802e-04,	-1.41544282201096238184e-03,	1.30526180302468542728e-03,
-2.15516693153640945084e-04,	-9.91545005626837680848e-04,	1.40092043277392254430e-03,	-7.37195361341796279175e-04,	-4.54362208344471813111e-04,
1.25333428791148419543e-03,	-1.07401466388498375085e-03,	9.29813696562068993856e-05,	9.16299953322832001941e-04,	-1.19202023546210577470e-03,
5.57883124410868012563e-04,	4.69089217705302360950e-04,	-1.09815752280277264055e-03,	8.72738120709139479809e-04,	1.59086322649948686606e-17,
-8.34269962692164488392e-04,	1.00347650463317302968e-03,	-4.09743819646897456613e-04,	-4.65807316236823180326e-04,	9.51353209470858895286e-04,
-6.98999855058347863666e-04,	-6.77953674209631177057e-05,	7.48444406110157782648e-04,	-8.34717075690952865427e-04,	2.89182877186851174794e-04,
4.48356084603550742590e-04,	-8.14129103951769092160e-04,	5.50551462260075522015e-04,	1.14323497957688304037e-04,	-6.61426807800065234832e-04,
6.85115139737861394108e-04,	-1.92905470220006592264e-04,	-4.20147756441587808679e-04,	6.87445387080537180860e-04,	-4.25245467600400821762e-04,
-1.43137752482049783161e-04,	5.75459964612238345991e-04,	-5.53945571582962516255e-04,	1.17843949010553006415e-04,	3.84213734759424746512e-04,
-5.72006064300578762234e-04,	3.20985322900219885618e-04,	1.57476753727904696502e-04,	-4.92442039229305729593e-04,	4.40360519124605436381e-04,
-6.11158984237219468421e-05,	-3.43232711045866184778e-04,	4.68256495346675851669e-04,	-2.35699136391176260717e-04,	-1.60292914933664125930e-04,
4.13938268942155634597e-04,	-3.43379859540216610548e-04,	2.00034497873488912407e-05,	2.99547488580573456705e-04,	-3.76386984574057683727e-04,
1.67330635957214934623e-04,	1.54266449947594526436e-04,	-3.41191408472849423521e-04,	2.61893299580668779090e-04,	8.05279514479269278480e-06,
-2.55175436646923596996e-04,	2.96342215806972989270e-04,	-1.13842622535031851049e-04,	-1.41810279217972689614e-04,	2.75132983349365620434e-04,
-1.94671629753711411537e-04,	-2.54500734776759313387e-05,	2.11816028404724189874e-04,	-2.27836176436640774814e-04,	7.32293266742738130750e-05,
1.25069748050846694162e-04,	-2.16396689504051313634e-04,	1.40385110218160314485e-04,	3.44136233828452870040e-05,	-1.70857877598651282424e-04,
1.70372087677429269329e-04,	-4.35348697515631835055e-05,	-1.05920015333544535697e-04,	1.65334727253454885458e-04,	-9.76272761553259886460e-05,
-3.69834472452726988750e-05,	1.33386928139425870246e-04,	-1.23266744569342537015e-04,	2.28755952926167351285e-05,	8.59631885903338233308e-05,
-1.22037437697000223291e-04,	6.49426690627289690061e-05,	3.49997701508900302685e-05,	-1.00196865667211281749e-04,	8.56785730607776796052e-05,
-9.46446697659455045946e-06,	-6.65266692585855958344e-05,	8.63562742451436685066e-05,	-4.08571718581856129751e-05,	-3.00887621489341436528e-05,
7.18023438752144919439e-05,	-5.66386338120534955963e-05,	1.63609179020208931880e-06,	4.86636553069401387220e-05,	-5.79298597048483944363e-05,
2.39097817990228664125e-05,	2.36496251653905383342e-05,	-4.84551958242321513396e-05,	3.50837424701660533432e-05,	2.12872724768803204837e-06,
-3.31562584077417705532e-05,	3.62126170833852091698e-05,	-1.26848245462504650749e-05,	-1.68436638203504859574e-05,	3.01633668014301200167e-05,
-1.98908275337553348827e-05,	-3.17960986456776301926e-06,	2.05211343146924406287e-05,	-2.05051642771505284520e-05,	5.84383209056902741942e-06,
1.05853442359444973822e-05,	-1.67117375359950484756e-05,	9.91158514242773024594e-06,	2.67452486382588598368e-06,	-1.10166907919041128714e-05,
9.98518925447251468888e-06,	-2.15664807649240962122e-06,	-5.53430391544287330659e-06,	7.68297174264196388921e-06,	-4.00632439860718102612e-06,
-1.55809650615897218943e-06,	4.64920929436531973710e-06,	-3.73641033077100233396e-06,	5.31975856986163223020e-07,	2.08484576894840408867e-06,
-2.47382397181436602094e-06,	1.07522317480708188551e-06,	5.36612291976711346790e-07,	-1.17010548874235241156e-06,	7.69403159384851343911e-07,
-4.92205007193716889789e-08,	-3.41144994954467118793e-07,	2.91750303564111967816e-07,	-8.13930413103165647524e-08,	-3.49451778821558497613e-08,
3.14890640928293504536e-08,	-4.82983503874297970980e-09,	-0.00000000000000000000e+00},
// Filter coeffs for 5 MHz, i.e., 25 RBs.
  {-0.00000000000000000000e+00,	6.06022836604361151530e-09,	-2.21907096409037968005e-08,	7.04705414522033127875e-09,	9.59267375915067394568e-08,
-2.81915030032608859149e-07,	4.30905106667997466197e-07,	-3.43975323648230941378e-07,	-1.20782844639654314373e-07,	8.85509577294735113365e-07,
-1.58517198868086595215e-06,	1.68910957255446803013e-06,	-7.99032215874905059492e-07,	-1.01859621324199752747e-06,	3.07880868938905296071e-06,
-4.26615797580567872061e-06,	3.55835075275353000424e-06,	-6.67647558681980221660e-07,	-3.55147488867716786863e-06,	7.23603582964343259004e-06,
-8.26080488443846077827e-06,	5.33392434430595770601e-06,	1.08266735792392224466e-06,	-8.57732653291867258225e-06,	1.35918784393598463564e-05,
-1.30156210054655024314e-05,	5.89380971910085579575e-06,	5.62355456105161020242e-06,	-1.67386334841101880213e-05,	2.19043271310926670158e-05,
-1.74619786978243832546e-05,	3.81131518782408171197e-06,	1.40649390785800764222e-05,	-2.82650168225563632580e-05,	3.13524515207059363076e-05,
-2.00584470207159181582e-05,	-2.47499075353387114297e-06,	2.72343394320313141391e-05,	-4.28040370860178085648e-05,	4.04992105984790985869e-05,
-1.89062795753120806727e-05,	-1.44434036415529029146e-05,	4.54560996393495392667e-05,	-5.93009680515537652350e-05,	4.73308908020880208666e-05,
-1.19345295908077372009e-05,	-3.32408078837179249919e-05,	6.83543178662155299094e-05,	-7.59466182171987004568e-05,	4.93785315564581995889e-05,
2.85641447202584749035e-06,	-5.94270092880646669405e-05,	9.47039456230804000889e-05,	-9.02079028142277944196e-05,	4.39192943694885059246e-05,
2.71110790984067847329e-05,	-9.27380203885323122284e-05,	1.22352621638798430767e-04,	-9.89495309721896416748e-05,	2.82478304620540260393e-05,
6.18189960777569617574e-05,	-1.31895721439407220734e-04,	1.48231547193492473307e-04,	-9.86474517875646678177e-05,	5.99433208733129980549e-18,
1.07026847592563140307e-04,	-1.74489983514645920909e-04,	1.68467403296553648769e-04,	-8.56862286906854268452e-05,	-4.24955148256635578349e-05,
1.61592898534345351391e-04,	-2.16955573424240069809e-04,	1.78599386383781403957e-04,	-5.67239744498398824435e-05,	-9.98674363145535628518e-05,
2.23013514607370240189e-04,	-2.54660128319176551001e-04,	1.73896467062417458887e-04,	-9.10059914282030843740e-06,	-1.71386883353030685263e-04,
2.87348550522541657404e-04,	-2.82111542927518735291e-04,	1.49760633252035664032e-04,	5.87413997916274687860e-05,	-2.54720757946932485453e-04,
3.49266870598332940159e-04,	-2.93283777274490841357e-04,	1.02192905799834268051e-04,	1.46858916527294660346e-04,	-3.45785140641319103678e-04,
4.02225511735097743075e-04,	-2.82050029102752324289e-04,	2.82910618088639054311e-05,	2.53470351936636026976e-04,	-4.38725554368326361825e-04,
4.38786485785068566985e-04,	-2.42702178300218388745e-04,	-7.32580290668709353374e-05,	3.74714471743967678184e-04,	-5.26043652934817126086e-04,
4.51064579212072499972e-04,	-1.70526195123336460823e-04,	-2.01732159441671981843e-04,	5.04538909252419680469e-04,	-5.98880440944638209669e-04,
4.31288500211298537687e-04,	-6.23955844601306440110e-05,	-3.54015080566603469216e-04,	6.34744656150269554590e-04,	-6.47455127841890841836e-04,
3.72447175534524883671e-04,	8.26603908933901912904e-05,	-5.24364428197188680789e-04,	7.55203792332309652505e-04,	-6.61646904255207930420e-04,
2.68983750743284090717e-04,	2.62959446327012459112e-04,	-7.04339873024613979252e-04,	8.54256608312585160626e-04,	-6.31695152246666488671e-04,
1.17492686795030303894e-04,	4.73784969873374797646e-04,	-8.82916682230758189005e-04,	9.19281883662756774123e-04,	-5.48982756676918005716e-04,
-8.26290509225096827953e-05,	7.07161561872304963647e-04,	-1.04679900085383041121e-03,	9.37421252427177056736e-04,	-4.06858149722506433257e-04,
-3.28626837615034889106e-04,	9.51820911448313339114e-04,	-1.18093447016321805715e-03,	8.96426245562476683298e-04,	-2.01445291125191926337e-04,
-6.13976942353397481776e-04,	1.19338115806938795983e-03,	-1.26921812281024061833e-03,	7.85585706609729489923e-04,	6.76123793449314326037e-05,
-9.28160373552668321179e-04,	1.41475016099149595097e-03,	-1.29535978018237686940e-03,	5.96682743238927506060e-04,	3.96527412825906197709e-04,
-1.25665405785838502767e-03,	1.59674875699763216090e-03,	-1.24387643700304387391e-03,	3.24925014967327016515e-04,	7.76912088571723676890e-04,
-1.58115882260744075767e-03,	1.71893504452686591254e-03,	-1.10116036116436502405e-03,	-3.02093746874539945742e-05,	1.19553070425488074460e-03,
-1.88006868505412403497e-03,	1.76059599892964863295e-03,	-8.56565810225604702850e-04,	-4.64265340015904538849e-04,	1.63428834772927659633e-03,
-2.12916937590733800975e-03,	1.70185933139828122346e-03,	-5.03453204536945708898e-04,	-9.67291223168523922604e-04,	2.07046829303581718731e-03,
-2.30253670573772346170e-03,	1.52486743632756593762e-03,	-4.01299924594823075258e-05,	-1.52354166353094546728e-03,	2.47721141358507677271e-03,
-2.37358815966325379862e-03,	1.21494739167246732121e-03,	5.29367151288801353684e-04,	-2.11142157396692351293e-03,	2.82420969497149555033e-03,
-2.31622465017512768615e-03,	7.61706962939229345784e-04,	1.19469326339039687637e-03,	-2.70366805160345393191e-03,	3.07856216033638475926e-03,
-2.10598397339803629358e-03,	1.59986854522815283210e-04,	1.93884671075743981149e-03,	-3.26773964199612160231e-03,	3.20571467711673607770e-03,
-1.72111282252896584735e-03,	-5.89395782964481597041e-04,	2.73805512104161518847e-03,	-3.76634764334038418809e-03,	3.17037311061518084498e-03,
-1.14344861193277380108e-03,	-1.47916847466504847511e-03,	3.56186631959209271114e-03,	-4.15801798161816345278e-03,	2.93723711336067337327e-03,
-3.58981990112078829230e-04,	-2.49543203668831830092e-03,	4.37336851097358016160e-03,	-4.39750553111112330029e-03,	2.47133851533330164627e-03,
6.42062536707842116193e-04,	-3.61782331178610565975e-03,	5.12939397532704774441e-03,	-4.43577582251439544309e-03,	1.73766015084750899237e-03,
1.86585462047473399881e-03,	-4.82002013426617841735e-03,	5.78044463106926025009e-03,	-4.21907804133051823892e-03,	6.99505757317057919563e-04,
3.31665508376699979740e-03,	-6.07057694262214814218e-03,	6.26986392347276405568e-03,	-3.68625675551923111251e-03,	-6.85332048670715871831e-04,
5.00023552519473970385e-03,	-7.33405981172290284686e-03,	6.53134047450328828616e-03,	-2.76263864050982658679e-03,	-2.47250276311729863879e-03,
6.93035396121000589476e-03,	-8.57243131537751591742e-03,	6.48282999209069850377e-03,	-1.34691876439260445168e-03,	-4.74731017831657702705e-03,
9.14131440036859005405e-03,	-9.74661974064162245357e-03,	6.01245142767973302783e-03,	7.17515573368856032777e-04,	-7.65950572113563606103e-03,
1.17143013278831996382e-02,	-1.08181948075235685736e-02,	4.94465111345395412490e-03,	3.71014236495918791128e-03,	-1.15056311234225123324e-02,
1.48398801786177540057e-02,	-1.17510640442619312268e-02,	2.95046937709307578387e-03,	8.21474263417515219998e-03,	-1.69560167491483795854e-02,
1.89951535543755600788e-02,	-1.25131009051517704672e-02,	-7.37348363434475197707e-04,	1.57203466769510052936e-02,	-2.58472779437465653707e-02,
2.55997235219503939396e-02,	-1.30776178631871724950e-02,	-8.56225864859409997731e-03,	3.14753475823744896522e-02,	-4.53661802896346208480e-02,
4.09428171648002561800e-02,	-1.34246050026941964733e-02,	-3.51707800199104539396e-02,	9.58772478826772633909e-02,	-1.54969326506713966918e-01,
1.97871766674291349464e-01,	7.86458334598076902466e-01,	1.97871766674291349464e-01,	-1.54969326506713966918e-01,	9.58772478826772633909e-02,
-3.51707800199104539396e-02,	-1.34246050026941964733e-02,	4.09428171648002561800e-02,	-4.53661802896346208480e-02,	3.14753475823744896522e-02,
-8.56225864859409997731e-03,	-1.30776178631871724950e-02,	2.55997235219503939396e-02,	-2.58472779437465653707e-02,	1.57203466769510052936e-02,
-7.37348363434475197707e-04,	-1.25131009051517704672e-02,	1.89951535543755600788e-02,	-1.69560167491483795854e-02,	8.21474263417515219998e-03,
2.95046937709307578387e-03,	-1.17510640442619312268e-02,	1.48398801786177540057e-02,	-1.15056311234225123324e-02,	3.71014236495918791128e-03,
4.94465111345395412490e-03,	-1.08181948075235685736e-02,	1.17143013278831996382e-02,	-7.65950572113563606103e-03,	7.17515573368856032777e-04,
6.01245142767973302783e-03,	-9.74661974064162245357e-03,	9.14131440036859005405e-03,	-4.74731017831657702705e-03,	-1.34691876439260445168e-03,
6.48282999209069850377e-03,	-8.57243131537751591742e-03,	6.93035396121000589476e-03,	-2.47250276311729863879e-03,	-2.76263864050982658679e-03,
6.53134047450328828616e-03,	-7.33405981172290284686e-03,	5.00023552519473970385e-03,	-6.85332048670715871831e-04,	-3.68625675551923111251e-03,
6.26986392347276405568e-03,	-6.07057694262214814218e-03,	3.31665508376699979740e-03,	6.99505757317057919563e-04,	-4.21907804133051823892e-03,
5.78044463106926025009e-03,	-4.82002013426617841735e-03,	1.86585462047473399881e-03,	1.73766015084750899237e-03,	-4.43577582251439544309e-03,
5.12939397532704774441e-03,	-3.61782331178610565975e-03,	6.42062536707842116193e-04,	2.47133851533330164627e-03,	-4.39750553111112330029e-03,
4.37336851097358016160e-03,	-2.49543203668831830092e-03,	-3.58981990112078829230e-04,	2.93723711336067337327e-03,	-4.15801798161816345278e-03,
3.56186631959209271114e-03,	-1.47916847466504847511e-03,	-1.14344861193277380108e-03,	3.17037311061518084498e-03,	-3.76634764334038418809e-03,
2.73805512104161518847e-03,	-5.89395782964481597041e-04,	-1.72111282252896584735e-03,	3.20571467711673607770e-03,	-3.26773964199612160231e-03,
1.93884671075743981149e-03,	1.59986854522815283210e-04,	-2.10598397339803629358e-03,	3.07856216033638475926e-03,	-2.70366805160345393191e-03,
1.19469326339039687637e-03,	7.61706962939229345784e-04,	-2.31622465017512768615e-03,	2.82420969497149555033e-03,	-2.11142157396692351293e-03,
5.29367151288801353684e-04,	1.21494739167246732121e-03,	-2.37358815966325379862e-03,	2.47721141358507677271e-03,	-1.52354166353094546728e-03,
-4.01299924594823075258e-05,	1.52486743632756593762e-03,	-2.30253670573772346170e-03,	2.07046829303581718731e-03,	-9.67291223168523922604e-04,
-5.03453204536945708898e-04,	1.70185933139828122346e-03,	-2.12916937590733800975e-03,	1.63428834772927659633e-03,	-4.64265340015904538849e-04,
-8.56565810225604702850e-04,	1.76059599892964863295e-03,	-1.88006868505412403497e-03,	1.19553070425488074460e-03,	-3.02093746874539945742e-05,
-1.10116036116436502405e-03,	1.71893504452686591254e-03,	-1.58115882260744075767e-03,	7.76912088571723676890e-04,	3.24925014967327016515e-04,
-1.24387643700304387391e-03,	1.59674875699763216090e-03,	-1.25665405785838502767e-03,	3.96527412825906197709e-04,	5.96682743238927506060e-04,
-1.29535978018237686940e-03,	1.41475016099149595097e-03,	-9.28160373552668321179e-04,	6.76123793449314326037e-05,	7.85585706609729489923e-04,
-1.26921812281024061833e-03,	1.19338115806938795983e-03,	-6.13976942353397481776e-04,	-2.01445291125191926337e-04,	8.96426245562476683298e-04,
-1.18093447016321805715e-03,	9.51820911448313339114e-04,	-3.28626837615034889106e-04,	-4.06858149722506433257e-04,	9.37421252427177056736e-04,
-1.04679900085383041121e-03,	7.07161561872304963647e-04,	-8.26290509225096827953e-05,	-5.48982756676918005716e-04,	9.19281883662756774123e-04,
-8.82916682230758189005e-04,	4.73784969873374797646e-04,	1.17492686795030303894e-04,	-6.31695152246666488671e-04,	8.54256608312585160626e-04,
-7.04339873024613979252e-04,	2.62959446327012459112e-04,	2.68983750743284090717e-04,	-6.61646904255207930420e-04,	7.55203792332309652505e-04,
-5.24364428197188680789e-04,	8.26603908933901912904e-05,	3.72447175534524883671e-04,	-6.47455127841890841836e-04,	6.34744656150269554590e-04,
-3.54015080566603469216e-04,	-6.23955844601306440110e-05,	4.31288500211298537687e-04,	-5.98880440944638209669e-04,	5.04538909252419680469e-04,
-2.01732159441671981843e-04,	-1.70526195123336460823e-04,	4.51064579212072499972e-04,	-5.26043652934817126086e-04,	3.74714471743967678184e-04,
-7.32580290668709353374e-05,	-2.42702178300218388745e-04,	4.38786485785068566985e-04,	-4.38725554368326361825e-04,	2.53470351936636026976e-04,
2.82910618088639054311e-05,	-2.82050029102752324289e-04,	4.02225511735097743075e-04,	-3.45785140641319103678e-04,	1.46858916527294660346e-04,
1.02192905799834268051e-04,	-2.93283777274490841357e-04,	3.49266870598332940159e-04,	-2.54720757946932485453e-04,	5.87413997916274687860e-05,
1.49760633252035664032e-04,	-2.82111542927518735291e-04,	2.87348550522541657404e-04,	-1.71386883353030685263e-04,	-9.10059914282030843740e-06,
1.73896467062417458887e-04,	-2.54660128319176551001e-04,	2.23013514607370240189e-04,	-9.98674363145535628518e-05,	-5.67239744498398824435e-05,
1.78599386383781403957e-04,	-2.16955573424240069809e-04,	1.61592898534345351391e-04,	-4.24955148256635578349e-05,	-8.56862286906854268452e-05,
1.68467403296553648769e-04,	-1.74489983514645920909e-04,	1.07026847592563140307e-04,	5.99433208733129980549e-18,	-9.86474517875646678177e-05,
1.48231547193492473307e-04,	-1.31895721439407220734e-04,	6.18189960777569617574e-05,	2.82478304620540260393e-05,	-9.89495309721896416748e-05,
1.22352621638798430767e-04,	-9.27380203885323122284e-05,	2.71110790984067847329e-05,	4.39192943694885059246e-05,	-9.02079028142277944196e-05,
9.47039456230804000889e-05,	-5.94270092880646669405e-05,	2.85641447202584749035e-06,	4.93785315564581995889e-05,	-7.59466182171987004568e-05,
6.83543178662155299094e-05,	-3.32408078837179249919e-05,	-1.19345295908077372009e-05,	4.73308908020880208666e-05,	-5.93009680515537652350e-05,
4.54560996393495392667e-05,	-1.44434036415529029146e-05,	-1.89062795753120806727e-05,	4.04992105984790985869e-05,	-4.28040370860178085648e-05,
2.72343394320313141391e-05,	-2.47499075353387114297e-06,	-2.00584470207159181582e-05,	3.13524515207059363076e-05,	-2.82650168225563632580e-05,
1.40649390785800764222e-05,	3.81131518782408171197e-06,	-1.74619786978243832546e-05,	2.19043271310926670158e-05,	-1.67386334841101880213e-05,
5.62355456105161020242e-06,	5.89380971910085579575e-06,	-1.30156210054655024314e-05,	1.35918784393598463564e-05,	-8.57732653291867258225e-06,
1.08266735792392224466e-06,	5.33392434430595770601e-06,	-8.26080488443846077827e-06,	7.23603582964343259004e-06,	-3.55147488867716786863e-06,
-6.67647558681980221660e-07,	3.55835075275353000424e-06,	-4.26615797580567872061e-06,	3.07880868938905296071e-06,	-1.01859621324199752747e-06,
-7.99032215874905059492e-07,	1.68910957255446803013e-06,	-1.58517198868086595215e-06,	8.85509577294735113365e-07,	-1.20782844639654314373e-07,
-3.43975323648230941378e-07,	4.30905106667997466197e-07,	-2.81915030032608859149e-07,	9.59267375915067394568e-08,	7.04705414522033127875e-09,
-2.21907096409037968005e-08,	6.06022836604361151530e-09,	-0.00000000000000000000e+00},
// Filter coeffs for 10 MHz, i.e., 50 RBs.
{

},
// Filter coeffs for 20 MHz, i.e., 100 RBs.
{

}
};

float trx_filter_coeffs_256[NUMBER_OF_FILTERS][257] __attribute__ ((aligned (32))) = {
// Filter coeffs for 1.4 MHz, i.e, 6 RBs.
  {-0.00000000000000000000e+00,	-6.29781258540561871165e-08,	1.62786076593905565424e-07,	6.82289964648919490169e-07,	-1.53880626179936165734e-06,
-1.07322454421978285842e-06,	4.94764776045492900525e-06,	-1.06395167458263810339e-06,	-9.29841824448068473283e-06,	8.01264850056720493690e-06,
1.10686074210990400922e-05,	-1.99703777695934799660e-05,	-5.34904952961707572080e-06,	3.34234738345726272997e-05,	-1.16876637484331202658e-05,
-4.10422671099014828321e-05,	3.97816535947002639594e-05,	3.36873263935130856368e-05,	-7.24252314854141826615e-05,	-4.25745433775315136854e-06,
9.69103880606072540021e-05,	-4.78195618276537400969e-05,	-9.73273070105879980910e-05,	1.13277263430311425380e-04,	6.01775220699436418624e-05,
-1.72712542096053832787e-04,	1.89289332524019349917e-05,	2.00393723915362947713e-04,	-1.29885333316789283774e-04,	-1.71926370815533342698e-04,
2.46533480011426825787e-04,	7.39668917521079776747e-05,	-3.30669442264730603816e-04,	8.70697362796055515004e-05,	3.41715742546155941493e-04,
-2.80770210041536040762e-04,	-2.50139486840929249276e-04,	4.55672336003203515449e-04,	5.09001450708871511219e-05,	-5.50265946326559301019e-04,
2.27685236640604043599e-04,	5.10350854399407687090e-04,	-5.23786579769511956295e-04,	-3.08532888472549363286e-04,	7.52773941278614064365e-04,
-4.00068980935452473335e-05,	-8.27876507234320152019e-04,	4.71398255330063612693e-04,	6.86465396677116645140e-04,	-8.80721005642796993078e-04,
-3.14953495795437777259e-04,	1.14401208624707504367e-03,	-2.35687889295394751438e-04,	-1.15091988661465195222e-03,	8.50490903713613244364e-04,
8.40295481773368612560e-04,	-1.37023022874650920663e-03,	-2.28646987450320505163e-04,	1.62825814762149255303e-03,	-5.78365732961248725161e-04,
-1.49688875680187185972e-03,	1.39799965835939307354e-03,	9.31614597983051518672e-04,	-2.00695293496413323941e-03,	2.11829218129812654409e-18,
2.19631496429267044496e-03,	-1.11576620751335591451e-03,	-1.83259983879834379393e-03,	2.14802924824477247875e-03,	9.08724383045759575954e-04,
-2.80184076181695228963e-03,	4.31033370349408195832e-04,	2.83088553921569119343e-03,	-1.90338326656478589761e-03,	-2.11317749558726864292e-03,
3.13845066553301074025e-03,	7.05779671829848609041e-04,	-3.76451206799922628160e-03,	1.13968012865880053038e-03,	3.50731197876209344413e-03,
-3.01110008666068866903e-03,	-2.27964526222887691603e-03,	4.41827352280665160839e-03,	2.35884261737677274322e-04,	-4.90920451347129273983e-03,
2.22830161591528689430e-03,	4.19504484789031718839e-03,	-4.53928320121829449035e-03,	-2.25248202405161062484e-03,	6.06495143666870104721e-03,
-6.26143409442675739560e-04,	-6.26808391142873091301e-03,	3.85548010475105775927e-03,	4.85972988445328938495e-03,	-6.65749809794720023848e-03,
-1.91422668857035610697e-03,	8.22577758226538009734e-03,	-2.08805854411089940673e-03,	-7.92257884748968389810e-03,	6.31085671107118727913e-03,
5.46573546183568882706e-03,	-9.70583677864531903234e-03,	-1.05973590907232286147e-03,	1.12290114320585908414e-02,	-4.56669698033891884731e-03,
-1.00894694951635076341e-02,	1.02365950934235738073e-02,	5.97889706448075791689e-03,	-1.45104138400775021372e-02,	7.69659214722083224319e-04,
1.59523207607643290051e-02,	-9.13277055123593722863e-03,	-1.34274203368555562765e-02,	1.74722580986572881279e-02,	6.36922944510556147263e-03,
-2.37171632077155802865e-02,	5.04152235254658881436e-03,	2.55914605404446889036e-02,	-1.98308090018567001467e-02,	-2.07617740823563302899e-02,
3.63366055674160873257e-02,	6.61335596937258352046e-03,	-5.24535098825132245492e-02,	2.13503345906250925623e-02,	6.59751277714544087649e-02,
-7.84895601321561053876e-02,	-7.49708985626979101946e-02,	3.08714729147802013909e-01,	5.78124977633273307021e-01,	3.08714729147802013909e-01,
-7.49708985626979101946e-02,	-7.84895601321561053876e-02,	6.59751277714544087649e-02,	2.13503345906250925623e-02,	-5.24535098825132245492e-02,
6.61335596937258352046e-03,	3.63366055674160873257e-02,	-2.07617740823563302899e-02,	-1.98308090018567001467e-02,	2.55914605404446889036e-02,
5.04152235254658881436e-03,	-2.37171632077155802865e-02,	6.36922944510556147263e-03,	1.74722580986572881279e-02,	-1.34274203368555562765e-02,
-9.13277055123593722863e-03,	1.59523207607643290051e-02,	7.69659214722083224319e-04,	-1.45104138400775021372e-02,	5.97889706448075791689e-03,
1.02365950934235738073e-02,	-1.00894694951635076341e-02,	-4.56669698033891884731e-03,	1.12290114320585908414e-02,	-1.05973590907232286147e-03,
-9.70583677864531903234e-03,	5.46573546183568882706e-03,	6.31085671107118727913e-03,	-7.92257884748968389810e-03,	-2.08805854411089940673e-03,
8.22577758226538009734e-03,	-1.91422668857035610697e-03,	-6.65749809794720023848e-03,	4.85972988445328938495e-03,	3.85548010475105775927e-03,
-6.26808391142873091301e-03,	-6.26143409442675739560e-04,	6.06495143666870104721e-03,	-2.25248202405161062484e-03,	-4.53928320121829449035e-03,
4.19504484789031718839e-03,	2.22830161591528689430e-03,	-4.90920451347129273983e-03,	2.35884261737677274322e-04,	4.41827352280665160839e-03,
-2.27964526222887691603e-03,	-3.01110008666068866903e-03,	3.50731197876209344413e-03,	1.13968012865880053038e-03,	-3.76451206799922628160e-03,
7.05779671829848609041e-04,	3.13845066553301074025e-03,	-2.11317749558726864292e-03,	-1.90338326656478589761e-03,	2.83088553921569119343e-03,
4.31033370349408195832e-04,	-2.80184076181695228963e-03,	9.08724383045759575954e-04,	2.14802924824477247875e-03,	-1.83259983879834379393e-03,
-1.11576620751335591451e-03,	2.19631496429267044496e-03,	2.11829218129812654409e-18,	-2.00695293496413323941e-03,	9.31614597983051518672e-04,
1.39799965835939307354e-03,	-1.49688875680187185972e-03,	-5.78365732961248725161e-04,	1.62825814762149255303e-03,	-2.28646987450320505163e-04,
-1.37023022874650920663e-03,	8.40295481773368612560e-04,	8.50490903713613244364e-04,	-1.15091988661465195222e-03,	-2.35687889295394751438e-04,
1.14401208624707504367e-03,	-3.14953495795437777259e-04,	-8.80721005642796993078e-04,	6.86465396677116645140e-04,	4.71398255330063612693e-04,
-8.27876507234320152019e-04,	-4.00068980935452473335e-05,	7.52773941278614064365e-04,	-3.08532888472549363286e-04,	-5.23786579769511956295e-04,
5.10350854399407687090e-04,	2.27685236640604043599e-04,	-5.50265946326559301019e-04,	5.09001450708871511219e-05,	4.55672336003203515449e-04,
-2.50139486840929249276e-04,	-2.80770210041536040762e-04,	3.41715742546155941493e-04,	8.70697362796055515004e-05,	-3.30669442264730603816e-04,
7.39668917521079776747e-05,	2.46533480011426825787e-04,	-1.71926370815533342698e-04,	-1.29885333316789283774e-04,	2.00393723915362947713e-04,
1.89289332524019349917e-05,	-1.72712542096053832787e-04,	6.01775220699436418624e-05,	1.13277263430311425380e-04,	-9.73273070105879980910e-05,
-4.78195618276537400969e-05,	9.69103880606072540021e-05,	-4.25745433775315136854e-06,	-7.24252314854141826615e-05,	3.36873263935130856368e-05,
3.97816535947002639594e-05,	-4.10422671099014828321e-05,	-1.16876637484331202658e-05,	3.34234738345726272997e-05,	-5.34904952961707572080e-06,
-1.99703777695934799660e-05,	1.10686074210990400922e-05,	8.01264850056720493690e-06,	-9.29841824448068473283e-06,	-1.06395167458263810339e-06,
4.94764776045492900525e-06,	-1.07322454421978285842e-06,	-1.53880626179936165734e-06,	6.82289964648919490169e-07,	1.62786076593905565424e-07,
-6.29781258540561871165e-08,	-0.00000000000000000000e+00},
// Filter coeffs for 3 MHz, i.e., 15 RBs.
  {0.00000000000000000000e+00,	5.11824574332874004309e-08,	-3.34978115923320907307e-07,	3.73158347267949370336e-07,	8.72417079889336119959e-07,
-3.13878318820146289179e-06,	3.68370342080201791323e-06,	5.33421195021098705754e-07,	-8.36835580305697321129e-06,	1.27719403441144920463e-05,
-5.87790229495565575264e-06,	-1.18188403962615593581e-05,	2.72862981526194648720e-05,	-2.30746360596605888736e-05,	-5.90777494585808213322e-06,
4.16336173100365495897e-05,	-5.19772381891554454726e-05,	1.74767404390346027207e-05,	4.50850077449636258038e-05,	-8.67408608542361074479e-05,
6.26837535538875929506e-05,	2.45052065802640406736e-05,	-1.13818445827512128559e-04,	1.25972436996603880501e-04,	-3.06782364366197130988e-05,
-1.14045519012489720667e-04,	1.92885994450959087198e-04,	-1.22552261216612225778e-04,	-6.78649105725648451150e-05,	2.38856281725839398721e-04,
-2.39770645702224642713e-04,	3.72636882323591970396e-05,	2.33818618095635522491e-04,	-3.55646029362449744068e-04,	1.99198066710306887763e-04,
1.50467520311861271834e-04,	-4.30852057475038523367e-04,	3.95680687076517567137e-04,	-2.54807666649536424582e-05,	-4.21225394766473911195e-04,
5.83538042999897027877e-04,	-2.85679018357838090600e-04,	-2.89708414240772663562e-04,	7.04087538685701239474e-04,	-5.93302295572048802794e-04,
-2.00094766511015648874e-05,	6.94877891842536664704e-04,	-8.83719035944354630065e-04,	3.71512416443532330918e-04,	5.06110920019201709387e-04,
-1.07323824400761967841e-03,	8.29546688200390354428e-04,	1.18414147757071316425e-04,	-1.07563090797645048192e-03,	1.26226857672001938071e-03,
-4.42480563593009967437e-04,	-8.23980988282860585779e-04,	1.55405666200277557155e-03,	-1.09876224180030295993e-03,	-2.93503952885421038818e-04,
1.58771659196881909960e-03,	-1.72489784309178993335e-03,	4.80198265398987006632e-04,	1.27288776698322616925e-03,	-2.16488168414652676699e-03,
1.39298854586262003084e-03,	5.75118722483237304090e-04,	-2.26112180378016921004e-03,	2.27836682049711251180e-03,	-4.61151453668833108054e-04,
-1.89070562374797027788e-03,	2.92962653130315626299e-03,	-1.70233864016599320372e-03,	-1.00227850653870670557e-03,	3.13630344318167018913e-03,
-2.93314467693862011843e-03,	3.54597338852952702597e-04,	2.72972511063547399260e-03,	-3.88358381901110450915e-03,	2.01549512387309750355e-03,
1.62959571562321906164e-03,	-4.27359645618853242754e-03,	3.70847652310859077912e-03,	-1.17977670164974525122e-04,	-3.86921245218446382963e-03,
5.08509613988446153993e-03,	-2.32029577979275727223e-03,	-2.54095385124465883778e-03,	5.77292129960228512370e-03,	-4.64268519650348678723e-03,
-3.13449285705972484697e-04,	5.44285784491844656929e-03,	-6.64086089191680533500e-03,	2.60437709894861856366e-03,	3.88088866013966979698e-03,
-7.81887197755443130731e-03,	5.81650343580143724953e-03,	1.05194041219721550265e-03,	-7.70524898200983417162e-03,	8.76763559517210362693e-03,
-2.85583936891536287542e-03,	-5.93567613287480835144e-03,	1.07987181290798081590e-02,	-7.41473908741445333209e-03,	-2.32808206250801827397e-03,
1.12202133227783801273e-02,	-1.19710837573289343577e-02,	3.06389481809345035415e-03,	9.38565228474239759970e-03,	-1.56809439521998321421e-02,
9.93038600358570229532e-03,	4.73801507868946373409e-03,	-1.75437711118080208461e-02,	1.77240040194122962236e-02,	-3.21946070233782412687e-03,
-1.63736693586749824936e-02,	2.57175562299412560630e-02,	-1.51455015585765084135e-02,	-1.05310047875258501471e-02,	3.30936943008383957499e-02,
-3.27020828778030181461e-02,	3.31566210060036054355e-03,	3.90535428434611517345e-02,	-6.24417990032506281528e-02,	3.74042072381438467366e-02,
4.29275470170148790161e-02,	-1.54273700030631705227e-01,	2.50893119942192932559e-01,	7.10937512444988817251e-01,	2.50893119942192932559e-01,
-1.54273700030631705227e-01,	4.29275470170148790161e-02,	3.74042072381438467366e-02,	-6.24417990032506281528e-02,	3.90535428434611517345e-02,
3.31566210060036054355e-03,	-3.27020828778030181461e-02,	3.30936943008383957499e-02,	-1.05310047875258501471e-02,	-1.51455015585765084135e-02,
2.57175562299412560630e-02,	-1.63736693586749824936e-02,	-3.21946070233782412687e-03,	1.77240040194122962236e-02,	-1.75437711118080208461e-02,
4.73801507868946373409e-03,	9.93038600358570229532e-03,	-1.56809439521998321421e-02,	9.38565228474239759970e-03,	3.06389481809345035415e-03,
-1.19710837573289343577e-02,	1.12202133227783801273e-02,	-2.32808206250801827397e-03,	-7.41473908741445333209e-03,	1.07987181290798081590e-02,
-5.93567613287480835144e-03,	-2.85583936891536287542e-03,	8.76763559517210362693e-03,	-7.70524898200983417162e-03,	1.05194041219721550265e-03,
5.81650343580143724953e-03,	-7.81887197755443130731e-03,	3.88088866013966979698e-03,	2.60437709894861856366e-03,	-6.64086089191680533500e-03,
5.44285784491844656929e-03,	-3.13449285705972484697e-04,	-4.64268519650348678723e-03,	5.77292129960228512370e-03,	-2.54095385124465883778e-03,
-2.32029577979275727223e-03,	5.08509613988446153993e-03,	-3.86921245218446382963e-03,	-1.17977670164974525122e-04,	3.70847652310859077912e-03,
-4.27359645618853242754e-03,	1.62959571562321906164e-03,	2.01549512387309750355e-03,	-3.88358381901110450915e-03,	2.72972511063547399260e-03,
3.54597338852952702597e-04,	-2.93314467693862011843e-03,	3.13630344318167018913e-03,	-1.00227850653870670557e-03,	-1.70233864016599320372e-03,
2.92962653130315626299e-03,	-1.89070562374797027788e-03,	-4.61151453668833108054e-04,	2.27836682049711251180e-03,	-2.26112180378016921004e-03,
5.75118722483237304090e-04,	1.39298854586262003084e-03,	-2.16488168414652676699e-03,	1.27288776698322616925e-03,	4.80198265398987006632e-04,
-1.72489784309178993335e-03,	1.58771659196881909960e-03,	-2.93503952885421038818e-04,	-1.09876224180030295993e-03,	1.55405666200277557155e-03,
-8.23980988282860585779e-04,	-4.42480563593009967437e-04,	1.26226857672001938071e-03,	-1.07563090797645048192e-03,	1.18414147757071316425e-04,
8.29546688200390354428e-04,	-1.07323824400761967841e-03,	5.06110920019201709387e-04,	3.71512416443532330918e-04,	-8.83719035944354630065e-04,
6.94877891842536664704e-04,	-2.00094766511015648874e-05,	-5.93302295572048802794e-04,	7.04087538685701239474e-04,	-2.89708414240772663562e-04,
-2.85679018357838090600e-04,	5.83538042999897027877e-04,	-4.21225394766473911195e-04,	-2.54807666649536424582e-05,	3.95680687076517567137e-04,
-4.30852057475038523367e-04,	1.50467520311861271834e-04,	1.99198066710306887763e-04,	-3.55646029362449744068e-04,	2.33818618095635522491e-04,
3.72636882323591970396e-05,	-2.39770645702224642713e-04,	2.38856281725839398721e-04,	-6.78649105725648451150e-05,	-1.22552261216612225778e-04,
1.92885994450959087198e-04,	-1.14045519012489720667e-04,	-3.06782364366197130988e-05,	1.25972436996603880501e-04,	-1.13818445827512128559e-04,
2.45052065802640406736e-05,	6.26837535538875929506e-05,	-8.67408608542361074479e-05,	4.50850077449636258038e-05,	1.74767404390346027207e-05,
-5.19772381891554454726e-05,	4.16336173100365495897e-05,	-5.90777494585808213322e-06,	-2.30746360596605888736e-05,	2.72862981526194648720e-05,
-1.18188403962615593581e-05,	-5.87790229495565575264e-06,	1.27719403441144920463e-05,	-8.36835580305697321129e-06,	5.33421195021098705754e-07,
3.68370342080201791323e-06,	-3.13878318820146289179e-06,	8.72417079889336119959e-07,	3.73158347267949370336e-07,	-3.34978115923320907307e-07,
5.11824574332874004309e-08,	0.00000000000000000000e+00},
// Filter coeffs for 5 MHz, i.e., 25 RBs.
  {0.00000000000000000000e+00,	-2.38605360282904193916e-08,	-1.00243174294396308624e-07,	7.57169202153667142556e-07,	-1.84674411065068198645e-06,
2.36043606480155897270e-06,	-8.09849095242764051641e-07,	-3.52230029256926239749e-06,	9.29841854866939630591e-06,	-1.29338021554721048566e-05,
1.01628080404255932608e-05,	1.08397304271696337007e-06,	-1.80781573429520239836e-05,	3.29232097601287032455e-05,	-3.55085897918894802206e-05,
1.90322433900487295196e-05,	1.45610962965632713254e-05,	-5.26313377345458672618e-05,	7.56436464997752846737e-05,	-6.61621913536901168785e-05,
1.92766753434374430137e-05,	5.11020548708135538074e-05,	-1.14683993790061242797e-04,	1.36804605399918428801e-04,	-9.57286164742838141441e-05,
-2.85679686716768126468e-06,	1.22513149069338616887e-04,	-2.08038326400018032565e-04,	2.09677574254568124205e-04,	-1.09458741353027518266e-04,
-6.34772121370888491509e-05,	2.38444502384869310482e-04,	-3.30669453082265568395e-04,	2.80683687636246008423e-04,	-8.79846529533468850503e-05,
-1.78755322146277893574e-04,	4.03807262042179355641e-04,	-4.73055284949596636501e-04,	3.29439434202216771715e-04,	-9.10181746212729112118e-06,
-3.62194918393152524242e-04,	6.16349169615813233421e-04,	-6.17195098751356120703e-04,	3.29711607417077412398e-04,	1.49736051659909346137e-04,
-6.21719891076473636649e-04,	8.64665484311408715466e-04,	-7.36488271403169130792e-04,	2.51263782222649876587e-04,	4.08410590312616660850e-04,
-9.56868260966281395166e-04,	1.12688914593538254405e-03,	-7.96553242387840134027e-04,	6.24708328410726398223e-05,	7.80890988878452769160e-04,
-1.35638241370814494231e-03,	1.37023027357227730402e-03,	-7.56954822320645283155e-04,	-2.66519253495042015428e-04,	1.27205004961891210771e-03,
-1.79643829411678499115e-03,	1.55142584645187532784e-03,	-5.73685455628953179866e-04,	-7.60374688233214743489e-04,	1.87484249063838434926e-03,
-2.23966313980134565723e-03,	1.61801971816978736561e-03,	-2.02121337100844022678e-04,	-1.43526730425636776627e-03,	2.56808742981700591917e-03,
-2.63494745278902015029e-03,	1.51022101310098856922e-03,	3.99949029207516751350e-04,	-2.29601790932506839155e-03,	3.31498155741996331641e-03,
-2.91785085300875525471e-03,	1.16287392122789391344e-03,	1.26975543620188777681e-03,	-3.33403365384117101114e-03,	4.06227723896836721840e-03,
-3.01110018516597723048e-03,	5.06773693949401490486e-04,	2.43813348855804632939e-03,	-4.52630855281331914708e-03,	4.73974672195839191735e-03,
-2.82419258407131832864e-03,	-5.31928528530606088004e-04,	3.93025594264884495233e-03,	-5.83566366418950942946e-03,	5.25900330554693144769e-03,
-2.25020901911168573484e-03,	-2.03646959537544247620e-03,	5.77013393137695493329e-03,	-7.21228624003799907022e-03,	5.50964018119691045089e-03,
-1.15596012616927873093e-03,	-4.11288892568194286437e-03,	7.99213530249760252533e-03,	-8.59649927570685021272e-03,	5.34801831836541688436e-03,
6.43440186670431613775e-04,	-6.92271562982795657382e-03,	1.06673322558360986895e-02,	-9.92256757110244504150e-03,	4.56669712973409389761e-03,
3.44923754938110350629e-03,	-1.07641269522367518524e-02,	1.39670781806601161656e-02,	-1.11232369845243039830e-02,	2.80799901907299864767e-03,
7.85824561536271545825e-03,	-1.62988178663506164123e-02,	1.83421978874839519680e-02,	-1.21346218564097035192e-02,	-7.17899940547179777478e-04,
1.53624699276927942360e-02,	-2.53454452525446426170e-02,	2.51817321976225798330e-02,	-1.29010107039616069707e-02,	-8.46853392077189827403e-03,
3.12029516082772892527e-02,	-4.50654230662224028481e-02,	4.07433029210507446916e-02,	-1.33791575521708706875e-02,	-3.50945523106474255304e-02,
9.57603300334148449524e-02,	-1.54885320390815539593e-01,	1.97844946929418563641e-01,	7.86458328634757064535e-01,	1.97844946929418563641e-01,
-1.54885320390815539593e-01,	9.57603300334148449524e-02,	-3.50945523106474255304e-02,	-1.33791575521708706875e-02,	4.07433029210507446916e-02,
-4.50654230662224028481e-02,	3.12029516082772892527e-02,	-8.46853392077189827403e-03,	-1.29010107039616069707e-02,	2.51817321976225798330e-02,
-2.53454452525446426170e-02,	1.53624699276927942360e-02,	-7.17899940547179777478e-04,	-1.21346218564097035192e-02,	1.83421978874839519680e-02,
-1.62988178663506164123e-02,	7.85824561536271545825e-03,	2.80799901907299864767e-03,	-1.11232369845243039830e-02,	1.39670781806601161656e-02,
-1.07641269522367518524e-02,	3.44923754938110350629e-03,	4.56669712973409389761e-03,	-9.92256757110244504150e-03,	1.06673322558360986895e-02,
-6.92271562982795657382e-03,	6.43440186670431613775e-04,	5.34801831836541688436e-03,	-8.59649927570685021272e-03,	7.99213530249760252533e-03,
-4.11288892568194286437e-03,	-1.15596012616927873093e-03,	5.50964018119691045089e-03,	-7.21228624003799907022e-03,	5.77013393137695493329e-03,
-2.03646959537544247620e-03,	-2.25020901911168573484e-03,	5.25900330554693144769e-03,	-5.83566366418950942946e-03,	3.93025594264884495233e-03,
-5.31928528530606088004e-04,	-2.82419258407131832864e-03,	4.73974672195839191735e-03,	-4.52630855281331914708e-03,	2.43813348855804632939e-03,
5.06773693949401490486e-04,	-3.01110018516597723048e-03,	4.06227723896836721840e-03,	-3.33403365384117101114e-03,	1.26975543620188777681e-03,
1.16287392122789391344e-03,	-2.91785085300875525471e-03,	3.31498155741996331641e-03,	-2.29601790932506839155e-03,	3.99949029207516751350e-04,
1.51022101310098856922e-03,	-2.63494745278902015029e-03,	2.56808742981700591917e-03,	-1.43526730425636776627e-03,	-2.02121337100844022678e-04,
1.61801971816978736561e-03,	-2.23966313980134565723e-03,	1.87484249063838434926e-03,	-7.60374688233214743489e-04,	-5.73685455628953179866e-04,
1.55142584645187532784e-03,	-1.79643829411678499115e-03,	1.27205004961891210771e-03,	-2.66519253495042015428e-04,	-7.56954822320645283155e-04,
1.37023027357227730402e-03,	-1.35638241370814494231e-03,	7.80890988878452769160e-04,	6.24708328410726398223e-05,	-7.96553242387840134027e-04,
1.12688914593538254405e-03,	-9.56868260966281395166e-04,	4.08410590312616660850e-04,	2.51263782222649876587e-04,	-7.36488271403169130792e-04,
8.64665484311408715466e-04,	-6.21719891076473636649e-04,	1.49736051659909346137e-04,	3.29711607417077412398e-04,	-6.17195098751356120703e-04,
6.16349169615813233421e-04,	-3.62194918393152524242e-04,	-9.10181746212729112118e-06,	3.29439434202216771715e-04,	-4.73055284949596636501e-04,
4.03807262042179355641e-04,	-1.78755322146277893574e-04,	-8.79846529533468850503e-05,	2.80683687636246008423e-04,	-3.30669453082265568395e-04,
2.38444502384869310482e-04,	-6.34772121370888491509e-05,	-1.09458741353027518266e-04,	2.09677574254568124205e-04,	-2.08038326400018032565e-04,
1.22513149069338616887e-04,	-2.85679686716768126468e-06,	-9.57286164742838141441e-05,	1.36804605399918428801e-04,	-1.14683993790061242797e-04,
5.11020548708135538074e-05,	1.92766753434374430137e-05,	-6.61621913536901168785e-05,	7.56436464997752846737e-05,	-5.26313377345458672618e-05,
1.45610962965632713254e-05,	1.90322433900487295196e-05,	-3.55085897918894802206e-05,	3.29232097601287032455e-05,	-1.80781573429520239836e-05,
1.08397304271696337007e-06,	1.01628080404255932608e-05,	-1.29338021554721048566e-05,	9.29841854866939630591e-06,	-3.52230029256926239749e-06,
-8.09849095242764051641e-07,	2.36043606480155897270e-06,	-1.84674411065068198645e-06,	7.57169202153667142556e-07,	-1.00243174294396308624e-07,
-2.38605360282904193916e-08,	0.00000000000000000000e+00},
// Filter coeffs for 10 MHz, i.e., 50 RBs.
{

},
// Filter coeffs for 20 MHz, i.e., 100 RBs.
{

}
};

float trx_filter_coeffs_128[NUMBER_OF_FILTERS][129] __attribute__ ((aligned (32))) = {
// Filter coeffs for 1.4 MHz, i.e, 6 RBs.
  {0.00000000000000000000e+00,	6.69956490710023327764e-07,	-1.74483483396248146968e-06,	-7.36740968828506593387e-06,	1.67367180729869870432e-05,
1.17558091322187613424e-05,	-5.45726173914625104877e-05,	1.18155544571092988753e-05,	1.03954516545123814100e-04,	-9.01700503305849813355e-05,
-1.25367555548333906154e-04,	2.27636979611301826579e-04,	6.13564965806665880066e-05,	-3.85772137959777708469e-04,	1.35729873589570678534e-04,
4.79541476693683707631e-04,	-4.67637416880919726692e-04,	-3.98396287356285439506e-04,	8.61704447902636016393e-04,	5.09615530208388619791e-05,
-1.16707653694457188544e-03,	5.79417052361565643875e-04,	1.18660504963445504779e-03,	-1.38975632067074258459e-03,	-7.43025119983296974610e-04,
2.14647731738907329019e-03,	-2.36828387021894719343e-04,	-2.52453812889214587040e-03,	1.64796261331929790386e-03,	2.19752533269873800287e-03,
-3.17543441088851416745e-03,	-9.60396901884171916124e-04,	4.32976504126382326365e-03,	-1.15023788940496409124e-03,	-4.55673540166367987275e-03,
3.78141270858975767077e-03,	3.40467859586006046935e-03,	-6.27260931002653152749e-03,	-7.09194951730475367339e-04,	7.76717063916645706484e-03,
-3.25919269056051431888e-03,	-7.41695591204254590229e-03,	7.73842789440730254025e-03,	4.64059335265667224218e-03,	-1.15458470603853752268e-02,
6.26898813638402502800e-04,	1.32817269157381404737e-02,	-7.76178031934088297206e-03,	-1.16330113664628951448e-02,	1.54105039184588774037e-02,
5.71168094475756841361e-03,	-2.15974446031606016894e-02,	4.65616592410428992155e-03,	2.39421767656360570675e-02,	-1.87713118225010557050e-02,
-1.98607796811452359809e-02,	3.50875557810388580271e-02,	6.43892389260067397189e-03,	-5.14351323338184257539e-02,	2.10620177131700392348e-02,
6.54041910270234394531e-02,	-7.81071158666019199623e-02,	-7.48084433813986093842e-02,	3.08547519280430226907e-01,	5.78125233500955792998e-01,
3.08547519280430226907e-01,	-7.48084433813986093842e-02,	-7.81071158666019199623e-02,	6.54041910270234394531e-02,	2.10620177131700392348e-02,
-5.14351323338184257539e-02,	6.43892389260067397189e-03,	3.50875557810388580271e-02,	-1.98607796811452359809e-02,	-1.87713118225010557050e-02,
2.39421767656360570675e-02,	4.65616592410428992155e-03,	-2.15974446031606016894e-02,	5.71168094475756841361e-03,	1.54105039184588774037e-02,
-1.16330113664628951448e-02,	-7.76178031934088297206e-03,	1.32817269157381404737e-02,	6.26898813638402502800e-04,	-1.15458470603853752268e-02,
4.64059335265667224218e-03,	7.73842789440730254025e-03,	-7.41695591204254590229e-03,	-3.25919269056051431888e-03,	7.76717063916645706484e-03,
-7.09194951730475367339e-04,	-6.27260931002653152749e-03,	3.40467859586006046935e-03,	3.78141270858975767077e-03,	-4.55673540166367987275e-03,
-1.15023788940496409124e-03,	4.32976504126382326365e-03,	-9.60396901884171916124e-04,	-3.17543441088851416745e-03,	2.19752533269873800287e-03,
1.64796261331929790386e-03,	-2.52453812889214587040e-03,	-2.36828387021894719343e-04,	2.14647731738907329019e-03,	-7.43025119983296974610e-04,
-1.38975632067074258459e-03,	1.18660504963445504779e-03,	5.79417052361565643875e-04,	-1.16707653694457188544e-03,	5.09615530208388619791e-05,
8.61704447902636016393e-04,	-3.98396287356285439506e-04,	-4.67637416880919726692e-04,	4.79541476693683707631e-04,	1.35729873589570678534e-04,
-3.85772137959777708469e-04,	6.13564965806665880066e-05,	2.27636979611301826579e-04,	-1.25367555548333906154e-04,	-9.01700503305849813355e-05,
1.03954516545123814100e-04,	1.18155544571092988753e-05,	-5.45726173914625104877e-05,	1.17558091322187613424e-05,	1.67367180729869870432e-05,
-7.36740968828506593387e-06,	-1.74483483396248146968e-06,	6.69956490710023327764e-07,	0.00000000000000000000e+00},
// Filter coeffs for 3 MHz, i.e., 15 RBs.
  {-0.00000000000000000000e+00,	4.24912398969266658453e-07,	8.99370223890996393332e-07,	-9.09014927096582149482e-06,	1.77522594976895875096e-05,
-5.96573292869739051997e-06,	-3.68260493424572604888e-05,	8.03073605267700611071e-05,	-6.25125032682059047226e-05,	-4.74814925817487545087e-05,
1.86066049111794685773e-04,	-2.12745740496963982357e-04,	3.08266804444131214502e-05,	2.79731232756850653996e-04,	-4.62514158296650117544e-04,
2.75570935015347420749e-04,	2.53083490712094306627e-04,	-7.46863786393023353430e-04,	7.23271163943514411483e-04,	-2.54884475577957800643e-05,
-9.19836566484910243477e-04,	1.32225843332920822010e-03,	-6.56315731856260686783e-04,	-7.77943464799307890165e-04,	1.90431013980972996952e-03,
-1.64311550082075759176e-03,	-1.18556974570948811532e-04,	2.19216886112363375239e-03,	-2.83852779787355105970e-03,	1.17767514003717151810e-03,
1.85107135078963098984e-03,	-3.92284696323783824840e-03,	3.06160554918263839649e-03,	5.79476753259311905958e-04,	-4.43173514662968323630e-03,
5.25349267728383514942e-03,	-1.77893945993218521688e-03,	-3.83605947140532727024e-03,	7.22670073206773365404e-03,	-5.12881549723699474430e-03,
-1.66152166016600606746e-03,	8.24818436927342128751e-03,	-9.04962461408551077646e-03,	2.37807840658875576864e-03,	7.46810374573407109028e-03,
-1.27723572469776863736e-02,	8.26792795014432042866e-03,	4.02675418597733033449e-03,	-1.51992584830986411648e-02,	1.56325391091823931444e-02,
-2.88708821566603874090e-03,	-1.49102705195346563888e-02,	2.37517891553789169123e-02,	-1.41694208865601189995e-02,	-9.96836387896145141585e-03,
3.16575253850348153906e-02,	-3.15779589952440847833e-02,	3.22820820918310030095e-03,	3.82953132152930308951e-02,	-6.15985622290334336459e-02,
3.70805078105378993492e-02,	4.27183686370457421644e-02,	-1.53939360363757632433e-01,	2.50757158959475145998e-01,	7.10937630995412406243e-01,
2.50757158959475145998e-01,	-1.53939360363757632433e-01,	4.27183686370457421644e-02,	3.70805078105378993492e-02,	-6.15985622290334336459e-02,
3.82953132152930308951e-02,	3.22820820918310030095e-03,	-3.15779589952440847833e-02,	3.16575253850348153906e-02,	-9.96836387896145141585e-03,
-1.41694208865601189995e-02,	2.37517891553789169123e-02,	-1.49102705195346563888e-02,	-2.88708821566603874090e-03,	1.56325391091823931444e-02,
-1.51992584830986411648e-02,	4.02675418597733033449e-03,	8.26792795014432042866e-03,	-1.27723572469776863736e-02,	7.46810374573407109028e-03,
2.37807840658875576864e-03,	-9.04962461408551077646e-03,	8.24818436927342128751e-03,	-1.66152166016600606746e-03,	-5.12881549723699474430e-03,
7.22670073206773365404e-03,	-3.83605947140532727024e-03,	-1.77893945993218521688e-03,	5.25349267728383514942e-03,	-4.43173514662968323630e-03,
5.79476753259311905958e-04,	3.06160554918263839649e-03,	-3.92284696323783824840e-03,	1.85107135078963098984e-03,	1.17767514003717151810e-03,
-2.83852779787355105970e-03,	2.19216886112363375239e-03,	-1.18556974570948811532e-04,	-1.64311550082075759176e-03,	1.90431013980972996952e-03,
-7.77943464799307890165e-04,	-6.56315731856260686783e-04,	1.32225843332920822010e-03,	-9.19836566484910243477e-04,	-2.54884475577957800643e-05,
7.23271163943514411483e-04,	-7.46863786393023353430e-04,	2.53083490712094306627e-04,	2.75570935015347420749e-04,	-4.62514158296650117544e-04,
2.79731232756850653996e-04,	3.08266804444131214502e-05,	-2.12745740496963982357e-04,	1.86066049111794685773e-04,	-4.74814925817487545087e-05,
-6.25125032682059047226e-05,	8.03073605267700611071e-05,	-3.68260493424572604888e-05,	-5.96573292869739051997e-06,	1.77522594976895875096e-05,
-9.09014927096582149482e-06,	8.99370223890996393332e-07,	4.24912398969266658453e-07,	-0.00000000000000000000e+00},
// Filter coeffs for 5 MHz, i.e., 25 RBs.
  {0.00000000000000000000e+00,	-6.83178849746421434816e-07,	2.53025714886320506056e-06,	-8.12566795069243987544e-07,	-1.11831109456429868612e-05,
3.32223142474067910401e-05,	-5.13219353344030338598e-05,	4.13983900818871059001e-05,	1.46867408536948162491e-05,	-1.08770485818893066507e-04,
1.96666337203824206957e-04,	-2.11636382335708494269e-04,	1.01093625336130062044e-04,	1.30119377489897378565e-04,	-3.97065523534968788967e-04,
5.55419430841367820460e-04,	-4.67637143418380492495e-04,	8.85649345867498422871e-05,	4.75513605826502299117e-04,	-9.77884531884010404362e-04,
1.12679024867437158584e-03,	-7.34363930011467172521e-04,	-1.50460534066592890217e-04,	1.20329453423393133334e-03,	-1.92500626886618749975e-03,
1.86123903132411169965e-03,	-8.51103813205776127751e-04,	-8.20209499410435769438e-04,	2.46634890149157424977e-03,	-3.26132775057508999053e-03,
2.62793769706163747243e-03,	-5.79962574432480045504e-04,	-2.16488125466333730315e-03,	4.40258305574108346758e-03,	-4.94434314202489479800e-03,
3.20448599503860096643e-03,	4.00807118059883578549e-04,	-4.47395363090670374756e-03,	7.13877245082311304158e-03,	-6.86349180243507432653e-03,
3.25919078466702918581e-03,	2.53559684669912594607e-03,	-8.13721438336698597860e-03,	1.08407101576309672364e-02,	-8.85068580075085500902e-03,
2.28715531900121555112e-03,	6.54268488060919840843e-03,	-1.38520687579598601735e-02,	1.58909797564526396318e-02,	-1.07027106136211840742e-02,
-6.43784764553659966634e-04,	1.39894423902466730203e-02,	-2.34081131436591170780e-02,	2.35588394925801067337e-02,	-1.22117431109464540107e-02,
-8.10102170937371073023e-03,	3.01303496004526015495e-02,	-4.38767626416346756546e-02,	3.99522527305145244703e-02,	-1.31984760309764234676e-02,
-3.47908289612380502986e-02,	9.52936742441184148067e-02,	-1.54549602426078597217e-01,	1.97737665615820290554e-01,	7.86458191077634150012e-01,
1.97737665615820290554e-01,	-1.54549602426078597217e-01,	9.52936742441184148067e-02,	-3.47908289612380502986e-02,	-1.31984760309764234676e-02,
3.99522527305145244703e-02,	-4.38767626416346756546e-02,	3.01303496004526015495e-02,	-8.10102170937371073023e-03,	-1.22117431109464540107e-02,
2.35588394925801067337e-02,	-2.34081131436591170780e-02,	1.39894423902466730203e-02,	-6.43784764553659966634e-04,	-1.07027106136211840742e-02,
1.58909797564526396318e-02,	-1.38520687579598601735e-02,	6.54268488060919840843e-03,	2.28715531900121555112e-03,	-8.85068580075085500902e-03,
1.08407101576309672364e-02,	-8.13721438336698597860e-03,	2.53559684669912594607e-03,	3.25919078466702918581e-03,	-6.86349180243507432653e-03,
7.13877245082311304158e-03,	-4.47395363090670374756e-03,	4.00807118059883578549e-04,	3.20448599503860096643e-03,	-4.94434314202489479800e-03,
4.40258305574108346758e-03,	-2.16488125466333730315e-03,	-5.79962574432480045504e-04,	2.62793769706163747243e-03,	-3.26132775057508999053e-03,
2.46634890149157424977e-03,	-8.20209499410435769438e-04,	-8.51103813205776127751e-04,	1.86123903132411169965e-03,	-1.92500626886618749975e-03,
1.20329453423393133334e-03,	-1.50460534066592890217e-04,	-7.34363930011467172521e-04,	1.12679024867437158584e-03,	-9.77884531884010404362e-04,
4.75513605826502299117e-04,	8.85649345867498422871e-05,	-4.67637143418380492495e-04,	5.55419430841367820460e-04,	-3.97065523534968788967e-04,
1.30119377489897378565e-04,	1.01093625336130062044e-04,	-2.11636382335708494269e-04,	1.96666337203824206957e-04,	-1.08770485818893066507e-04,
1.46867408536948162491e-05,	4.13983900818871059001e-05,	-5.13219353344030338598e-05,	3.32223142474067910401e-05,	-1.11831109456429868612e-05,
-8.12566795069243987544e-07,	2.53025714886320506056e-06,	-6.83178849746421434816e-07,	0.00000000000000000000e+00},
// Filter coeffs for 10 MHz, i.e., 50 RBs.
{0.00000000000000000000e+00,	-6.44375341953244464021e-07,	3.52397680196700380549e-06,	-5.45630909409495230952e-06,	-1.97299368804977543938e-06,
2.44718642609863688202e-05,	-5.44773375119360836125e-05,	6.80322719746835396712e-05,	-3.61682056436597783463e-05,	-5.21587173968929667376e-05,
1.69502546386352941641e-04,	-2.49382099407483741934e-04,	2.14991723281804039550e-04,	-2.84133677389485898737e-05,	-2.66096877704983950444e-04,
5.36318594284962966469e-04,	-6.10997377126122598844e-04,	3.70880712628489665663e-04,	1.61200788376689955073e-04,	-7.86434593219518997959e-04,
1.18930312210388782618e-03,	-1.08185475275573072737e-03,	3.72985049189134205191e-04,	7.26959072488198715378e-04,	-1.74138343936547780426e-03,
2.11723717698125745226e-03,	-1.50205143069409791448e-03,	-2.19358686515914621509e-05,	1.88177074420215265094e-03,	-3.20406678743122589823e-03,
3.20277834125120512004e-03,	-1.60174495689164296010e-03,	-1.12062500650236080910e-03,	3.82522543311108543032e-03,	-5.16060125843673719176e-03,
4.20294020531467461127e-03,	-9.98265166964031926133e-04,	-3.28370823923288717230e-03,	6.72905919353450690523e-03,	-7.49514352718075229504e-03,
4.73161167689433500433e-03,	8.29894022346597628505e-04,	-6.96191048285238218291e-03,	1.07721585886092208195e-02,	-9.99683931473828446546e-03,
4.20561447385684079869e-03,	4.67581549550222068390e-03,	-1.28858070933395574276e-02,	1.63108076312641833705e-02,	-1.23887218027639457035e-02,
1.60795408438848316107e-03,	1.21600498622437460522e-02,	-2.28390130484065374816e-02,	2.45510561012227609967e-02,	-1.43734353728042947573e-02,
-5.69991339686197733688e-03,	2.85537291652475169745e-02,	-4.38459276043661472233e-02,	4.15129580607297016259e-02,	-1.56865095053686162685e-02,
-3.24639090013584125094e-02,	9.41588875712710687838e-02,	-1.55118525183250227650e-01,	1.99769361594283517691e-01,	7.83854030700117387909e-01,
1.99769361594283517691e-01,	-1.55118525183250227650e-01,	9.41588875712710687838e-02,	-3.24639090013584125094e-02,	-1.56865095053686162685e-02,
4.15129580607297016259e-02,	-4.38459276043661472233e-02,	2.85537291652475169745e-02,	-5.69991339686197733688e-03,	-1.43734353728042947573e-02,
2.45510561012227609967e-02,	-2.28390130484065374816e-02,	1.21600498622437460522e-02,	1.60795408438848316107e-03,	-1.23887218027639457035e-02,
1.63108076312641833705e-02,	-1.28858070933395574276e-02,	4.67581549550222068390e-03,	4.20561447385684079869e-03,	-9.99683931473828446546e-03,
1.07721585886092208195e-02,	-6.96191048285238218291e-03,	8.29894022346597628505e-04,	4.73161167689433500433e-03,	-7.49514352718075229504e-03,
6.72905919353450690523e-03,	-3.28370823923288717230e-03,	-9.98265166964031926133e-04,	4.20294020531467461127e-03,	-5.16060125843673719176e-03,
3.82522543311108543032e-03,	-1.12062500650236080910e-03,	-1.60174495689164296010e-03,	3.20277834125120512004e-03,	-3.20406678743122589823e-03,
1.88177074420215265094e-03,	-2.19358686515914621509e-05,	-1.50205143069409791448e-03,	2.11723717698125745226e-03,	-1.74138343936547780426e-03,
7.26959072488198715378e-04,	3.72985049189134205191e-04,	-1.08185475275573072737e-03,	1.18930312210388782618e-03,	-7.86434593219518997959e-04,
1.61200788376689955073e-04,	3.70880712628489665663e-04,	-6.10997377126122598844e-04,	5.36318594284962966469e-04,	-2.66096877704983950444e-04,
-2.84133677389485898737e-05,	2.14991723281804039550e-04,	-2.49382099407483741934e-04,	1.69502546386352941641e-04,	-5.21587173968929667376e-05,
-3.61682056436597783463e-05,	6.80322719746835396712e-05,	-5.44773375119360836125e-05,	2.44718642609863688202e-05,	-1.97299368804977543938e-06,
-5.45630909409495230952e-06,	3.52397680196700380549e-06,	-6.44375341953244464021e-07,	0.00000000000000000000e+00},
// Filter coeffs for 20 MHz, i.e., 100 RBs.
{0.00000000000000000000e+00,	-5.59745633881080449488e-07,	3.69534459902513073455e-06,	-7.34002924408593977046e-06,	2.95354776981962225408e-06,
1.78170788230066703831e-05,	-5.14782478887566922457e-05,	7.61455224704309162169e-05,	-5.94179280767306503257e-05,	-1.91434739312123962179e-05,
1.43124207359615705087e-04,	-2.51053482910634166280e-04,	2.58605699203823279943e-04,	-1.07574654717653109162e-04,	-1.82461250312773574141e-04,
4.94140856668175750682e-04,	-6.48631369957635805883e-04,	4.94059674075019903371e-04,	-7.36693836086069215729e-06,	-6.48977003244084380516e-04,
1.16312135349284722328e-03,	-1.20798261832181781476e-03,	6.22062897378426933083e-04,	4.54656374934843648516e-04,	-1.57823704573157338853e-03,
2.16587906947087122447e-03,	-1.77694561322404428680e-03,	3.82571860962335557298e-04,	1.52495864737342968868e-03,	-3.07645380785316743463e-03,
3.39991989402108106891e-03,	-2.07347787072650327142e-03,	-5.65147430012801193361e-04,	3.44181737725655348056e-03,	-5.15282530113929729265e-03,
4.61687651296891540115e-03,	-1.68274939144883828139e-03,	-2.62479140033038517779e-03,	6.40875545343266763559e-03,	-7.69494635156653221386e-03,
5.40292218300920164958e-03,	-3.77733171918661961015e-05,	-6.28723845961830056506e-03,	1.06184457498501097494e-02,	-1.04714161835585267690e-02,
5.12962234994439325586e-03,	3.70180241032029653386e-03,	-1.23079968958024841413e-02,	1.64163292657227635751e-02,	-1.31633305909466483824e-02,
2.72775978666111099114e-03,	1.11924656460712628608e-02,	-2.24715552828560587162e-02,	2.49730917956722184292e-02,	-1.54191047899945778837e-02,
-4.48695557577394061460e-03,	2.77191248773879413136e-02,	-4.37765753969326376627e-02,	4.22560340452445490356e-02,	-1.69209432986366821450e-02,
-3.12872561649242889037e-02,	9.35701826767897787418e-02,	-1.55387425076980667527e-01,	2.00780207545527167312e-01,	7.82551964566776669940e-01,
2.00780207545527167312e-01,	-1.55387425076980667527e-01,	9.35701826767897787418e-02,	-3.12872561649242889037e-02,	-1.69209432986366821450e-02,
4.22560340452445490356e-02,	-4.37765753969326376627e-02,	2.77191248773879413136e-02,	-4.48695557577394061460e-03,	-1.54191047899945778837e-02,
2.49730917956722184292e-02,	-2.24715552828560587162e-02,	1.11924656460712628608e-02,	2.72775978666111099114e-03,	-1.31633305909466483824e-02,
1.64163292657227635751e-02,	-1.23079968958024841413e-02,	3.70180241032029653386e-03,	5.12962234994439325586e-03,	-1.04714161835585267690e-02,
1.06184457498501097494e-02,	-6.28723845961830056506e-03,	-3.77733171918661961015e-05,	5.40292218300920164958e-03,	-7.69494635156653221386e-03,
6.40875545343266763559e-03,	-2.62479140033038517779e-03,	-1.68274939144883828139e-03,	4.61687651296891540115e-03,	-5.15282530113929729265e-03,
3.44181737725655348056e-03,	-5.65147430012801193361e-04,	-2.07347787072650327142e-03,	3.39991989402108106891e-03,	-3.07645380785316743463e-03,
1.52495864737342968868e-03,	3.82571860962335557298e-04,	-1.77694561322404428680e-03,	2.16587906947087122447e-03,	-1.57823704573157338853e-03,
4.54656374934843648516e-04,	6.22062897378426933083e-04,	-1.20798261832181781476e-03,	1.16312135349284722328e-03,	-6.48977003244084380516e-04,
-7.36693836086069215729e-06,	4.94059674075019903371e-04,	-6.48631369957635805883e-04,	4.94140856668175750682e-04,	-1.82461250312773574141e-04,
-1.07574654717653109162e-04,	2.58605699203823279943e-04,	-2.51053482910634166280e-04,	1.43124207359615705087e-04,	-1.91434739312123962179e-05,
-5.94179280767306503257e-05,	7.61455224704309162169e-05,	-5.14782478887566922457e-05,	1.78170788230066703831e-05,	2.95354776981962225408e-06,
-7.34002924408593977046e-06,	3.69534459902513073455e-06,	-5.59745633881080449488e-07,	0.00000000000000000000e+00}
};

float trx_filter_coeffs_64[NUMBER_OF_FILTERS][65] __attribute__ ((aligned (32))) = {
// Filter coeffs for 1.4 MHz, i.e, 6 RBs.
  {0.00000000000000000000e+00,	-1.79873333510613210481e-06,	-3.55043786015085127152e-05,	7.36518074458413526777e-05,	1.25024512155832447612e-04,
-3.72130626718918274248e-04,	-6.16531170957962355384e-05,	9.25024658796789567110e-04,	-5.06164979911600675273e-04,	-1.44653660789188548592e-03,
1.83966585843578890949e-03,	1.31262627323487342593e-03,	-3.80860521936917740052e-03,	2.37113011533243386343e-04,	5.67703314722981400992e-03,
-3.70212806236834253773e-03,	-6.12318688563598910457e-03,	8.86343524485045351768e-03,	3.55786485110891554165e-03,	-1.44533443117213257489e-02,
3.32303018017613381596e-03,	1.80991776591503984728e-02,	-1.49361484299165968997e-02,	-1.65357905133215882243e-02,	3.03983967627534795719e-02,
5.77415359877425215379e-03,	-4.75033904695643521832e-02,	1.99366489230463246607e-02,	6.31556682559747950556e-02,	-7.65903235718290859024e-02,
-7.41607223696159334470e-02,	3.07877503296988819237e-01,	5.78122820470483356203e-01,	3.07877503296988819237e-01,	-7.41607223696159334470e-02,
-7.65903235718290859024e-02,	6.31556682559747950556e-02,	1.99366489230463246607e-02,	-4.75033904695643521832e-02,	5.77415359877425215379e-03,
3.03983967627534795719e-02,	-1.65357905133215882243e-02,	-1.49361484299165968997e-02,	1.80991776591503984728e-02,	3.32303018017613381596e-03,
-1.44533443117213257489e-02,	3.55786485110891554165e-03,	8.86343524485045351768e-03,	-6.12318688563598910457e-03,	-3.70212806236834253773e-03,
5.67703314722981400992e-03,	2.37113011533243386343e-04,	-3.80860521936917740052e-03,	1.31262627323487342593e-03,	1.83966585843578890949e-03,
-1.44653660789188548592e-03,	-5.06164979911600675273e-04,	9.25024658796789567110e-04,	-6.16531170957962355384e-05,	-3.72130626718918274248e-04,
1.25024512155832447612e-04,	7.36518074458413526777e-05,	-3.55043786015085127152e-05,	-1.79873333510613210481e-06,	0.00000000000000000000e+00},
// Filter coeffs for 3 MHz, i.e., 15 RBs.
  {0.00000000000000000000e+00,	9.06184922830537555712e-07,	-3.45305585135150891626e-05,	1.02324389186616356451e-04,	-6.53253757937496498621e-05,
-2.27580059986128274002e-04,	6.28248085247492529457e-04,	-6.10814361706204806551e-04,	-2.58041622447203404089e-04,	1.60865825330417148119e-03,
-2.15138666779408080712e-03,	6.72659760917177938430e-04,	2.46349792203565554766e-03,	-4.83092945776342728992e-03,	3.53398959785425608587e-03,
1.92064415797721420656e-03,	-8.00035877085502993011e-03,	8.99117518849569183348e-03,	-1.79840400607072375960e-03,	-9.97822293880932902066e-03,
1.69513334438578314178e-02,	-1.07114683983124247407e-02,	-7.93176026873873042666e-03,	2.63576891463236026580e-02,	-2.73579353877904211945e-02,
2.89493140842340132904e-03,	3.53681278754199787673e-02,	-5.83075056323181309392e-02,	3.58058616751129252243e-02,	4.18889680812640774477e-02,
-1.52607090016723706549e-01,	2.50213615112854670386e-01,	7.10937446480850110397e-01,	2.50213615112854670386e-01,	-1.52607090016723706549e-01,
4.18889680812640774477e-02,	3.58058616751129252243e-02,	-5.83075056323181309392e-02,	3.53681278754199787673e-02,	2.89493140842340132904e-03,
-2.73579353877904211945e-02,	2.63576891463236026580e-02,	-7.93176026873873042666e-03,	-1.07114683983124247407e-02,	1.69513334438578314178e-02,
-9.97822293880932902066e-03,	-1.79840400607072375960e-03,	8.99117518849569183348e-03,	-8.00035877085502993011e-03,	1.92064415797721420656e-03,
3.53398959785425608587e-03,	-4.83092945776342728992e-03,	2.46349792203565554766e-03,	6.72659760917177938430e-04,	-2.15138666779408080712e-03,
1.60865825330417148119e-03,	-2.58041622447203404089e-04,	-6.10814361706204806551e-04,	6.28248085247492529457e-04,	-2.27580059986128274002e-04,
-6.53253757937496498621e-05,	1.02324389186616356451e-04,	-3.45305585135150891626e-05,	9.06184922830537555712e-07,	0.00000000000000000000e+00},
// Filter coeffs for 5 MHz, i.e., 25 RBs.
  {-0.00000000000000000000e+00,	6.88476860803144882490e-06,	-3.85247106461842250933e-05,	6.24152025609568227981e-05,	1.47182830491424946533e-05,
-2.65424697761349078200e-04,	6.20605498553971203328e-04,	-8.17406825415999886524e-04,	5.06167803703682565690e-04,	4.94523132141343082883e-04,
-1.93448177786853373929e-03,	3.06639422989860238947e-03,	-2.91957582029239107874e-03,	8.65080003869415263898e-04,	2.79656915916809498818e-03,
-6.60704715182940886115e-03,	8.36447550135568582141e-03,	-6.15576023108229102715e-03,	-4.01022628067721756059e-04,	9.36200914274602433163e-03,
-1.67060940577263769558e-02,	1.78095021900220897015e-02,	-9.71682392962084154342e-03,	-6.74483206266916334587e-03,	2.61038407114593321023e-02,
-3.93470605779493443066e-02,	3.68984986162675943078e-02,	-1.24933426785089063404e-02,	-3.35949663250551672222e-02,	9.34437054683108503372e-02,
-1.53212395334981099637e-01,	1.97309491166133027518e-01,	7.86459755863254339481e-01,	1.97309491166133027518e-01,	-1.53212395334981099637e-01,
9.34437054683108503372e-02,	-3.35949663250551672222e-02,	-1.24933426785089063404e-02,	3.68984986162675943078e-02,	-3.93470605779493443066e-02,
2.61038407114593321023e-02,	-6.74483206266916334587e-03,	-9.71682392962084154342e-03,	1.78095021900220897015e-02,	-1.67060940577263769558e-02,
9.36200914274602433163e-03,	-4.01022628067721756059e-04,	-6.15576023108229102715e-03,	8.36447550135568582141e-03,	-6.60704715182940886115e-03,
2.79656915916809498818e-03,	8.65080003869415263898e-04,	-2.91957582029239107874e-03,	3.06639422989860238947e-03,	-1.93448177786853373929e-03,
4.94523132141343082883e-04,	5.06167803703682565690e-04,	-8.17406825415999886524e-04,	6.20605498553971203328e-04,	-2.65424697761349078200e-04,
1.47182830491424946533e-05,	6.24152025609568227981e-05,	-3.85247106461842250933e-05,	6.88476860803144882490e-06,	-0.00000000000000000000e+00},
// Filter coeffs for 10 MHz, i.e., 50 RBs.
  {-0.00000000000000000000e+00,	5.98189413458236602761e-06,	-4.02097139210775498521e-05,	8.18625210695798281695e-05,	-3.66578964094494138084e-05,
-1.94811375555089795692e-04,	5.84987149777124108667e-04,	-8.92633109415888340368e-04,	7.34841585792902433211e-04,	1.61856051700231217110e-04,
-1.65507324149375962923e-03,	3.04700307036539748753e-03,	-3.29765671313952696969e-03,	1.59070619100215712369e-03,	1.99860432800346701429e-03,
-6.14616606568132040761e-03,	8.58545669903693423053e-03,	-7.12548304089045177884e-03,	1.00161708677160184167e-03,	8.13774187084760625144e-03,
-1.62999301858041574509e-02,	1.85595722672279618559e-02,	-1.14368691278461751676e-02,	-4.74569146082994604979e-03,	2.47379081764565675328e-02,
-3.93193995650910899098e-02,	3.83399022323369642606e-02,	-1.48484485569914791830e-02,	-3.13480220092733144477e-02,	9.23309269831769502401e-02,
-1.53776359277875890319e-01,	1.99336740681424068322e-01,	7.83855405102189095601e-01,	1.99336740681424068322e-01,	-1.53776359277875890319e-01,
9.23309269831769502401e-02,	-3.13480220092733144477e-02,	-1.48484485569914791830e-02,	3.83399022323369642606e-02,	-3.93193995650910899098e-02,
2.47379081764565675328e-02,	-4.74569146082994604979e-03,	-1.14368691278461751676e-02,	1.85595722672279618559e-02,	-1.62999301858041574509e-02,
8.13774187084760625144e-03,	1.00161708677160184167e-03,	-7.12548304089045177884e-03,	8.58545669903693423053e-03,	-6.14616606568132040761e-03,
1.99860432800346701429e-03,	1.59070619100215712369e-03,	-3.29765671313952696969e-03,	3.04700307036539748753e-03,	-1.65507324149375962923e-03,
1.61856051700231217110e-04,	7.34841585792902433211e-04,	-8.92633109415888340368e-04,	5.84987149777124108667e-04,	-1.94811375555089795692e-04,
-3.66578964094494138084e-05,	8.18625210695798281695e-05,	-4.02097139210775498521e-05,	5.98189413458236602761e-06,	-0.00000000000000000000e+00},
// Filter coeffs for 20 MHz, i.e., 100 RBs.
  {-0.00000000000000000000e+00,	5.38231899291778601295e-06,	-4.01491190327304069661e-05,	8.99249251219698766437e-05,	-6.17932428065990008766e-05,
-1.55720025830973027997e-04,	5.57141616428756167832e-04,	-9.16428436065771221709e-04,	8.39099120184069345238e-04,	-7.36701159754934869643e-06,
-1.49468142442367273037e-03,	3.00352345840141808295e-03,	-3.45420473548800534974e-03,	1.94019699656772714666e-03,	1.58227735958049189023e-03,
-5.87056587038841792142e-03,	8.64099816876067773619e-03,	-7.57100479077325513866e-03,	1.69915941570854809629e-03,	7.49021435568511181891e-03,
-1.60376771107534517313e-02,	1.88786102378592918205e-02,	-1.22689007501359040320e-02,	-3.73579412035599705069e-03,	2.40148332079376698733e-02,
-3.92572000632472190018e-02,	3.90261739969846241372e-02,	-1.60169291393533058665e-02,	-3.02118090429789633300e-02,	9.17536345528746771771e-02,
-1.54042904973047650730e-01,	2.00345361728283655189e-01,	7.82553196793815297738e-01,	2.00345361728283655189e-01,	-1.54042904973047650730e-01,
9.17536345528746771771e-02,	-3.02118090429789633300e-02,	-1.60169291393533058665e-02,	3.90261739969846241372e-02,	-3.92572000632472190018e-02,
2.40148332079376698733e-02,	-3.73579412035599705069e-03,	-1.22689007501359040320e-02,	1.88786102378592918205e-02,	-1.60376771107534517313e-02,
7.49021435568511181891e-03,	1.69915941570854809629e-03,	-7.57100479077325513866e-03,	8.64099816876067773619e-03,	-5.87056587038841792142e-03,
1.58227735958049189023e-03,	1.94019699656772714666e-03,	-3.45420473548800534974e-03,	3.00352345840141808295e-03,	-1.49468142442367273037e-03,
-7.36701159754934869643e-06,	8.39099120184069345238e-04,	-9.16428436065771221709e-04,	5.57141616428756167832e-04,	-1.55720025830973027997e-04,
-6.17932428065990008766e-05,	8.99249251219698766437e-05,	-4.01491190327304069661e-05,	5.38231899291778601295e-06,	-0.00000000000000000000e+00}
};

void trx_filter_run_fir_filter_real(float *input, uint32_t input_len, uint32_t bw_idx, uint32_t filter_idx, float *output) {

   int input_idx;

   // Initialize the filter length based on the filter index.
   trx_filter_init_filter_length(filter_idx);

   // Use the correct filter order and BW.
   trx_filter_init_coeffs(bw_idx);

   for(int i = 0; i < input_len; i++) {
      output[i] = 0.0;
      for(int j = 0; j < trx_filter_length; j++) {

         input_idx = i-j;

         if(input_idx < 0) {
            break;
         } else {
            output[i] = output[i] + (trx_filter_coeffs[j]*input[input_idx]);
         }
      }
   }
}

void trx_filter_run_fir_filter_complex(cf_t *input, uint32_t input_len, uint32_t bw_idx, uint32_t filter_idx, cf_t *output) {

  int input_idx;

   // Initialize the filter length based on the filter index.
   trx_filter_init_filter_length(filter_idx);

   // Use the correct filter order and BW.
   trx_filter_init_coeffs(bw_idx);

   for(int i = 0; i < input_len; i++) {
      output[i] = 0.0 + 0.0i;
      for(int j = 0; j < trx_filter_length; j++) {

         input_idx = i-j;

         if(input_idx < 0) {
            break;
         } else {
            output[i] = output[i] + (trx_filter_coeffs[j]*input[input_idx]);
         }
      }
   }
}

void trx_filter_create_simd_kernel(uint32_t bw_idx) {
   float kernel_block[4] __attribute__ ((aligned (16)));
   float tmp;

   // Use the correct filter order and BW.
   trx_filter_init_coeffs(bw_idx);

   // Reverse the kernel and repeat each value across a 4-vector
   for(int i = 0; i < trx_filter_length; i++) {
      tmp = trx_filter_coeffs[i];
      kernel_block[0] = tmp;
      kernel_block[1] = tmp;
      kernel_block[2] = tmp;
      kernel_block[3] = tmp;
      // Loads four single-precision, floating-point values.
      kernel[i] = _mm_load_ps(kernel_block);
   }
}

void trx_filter_run_fir_filter_sse_real(float *input, uint32_t input_len, float *output) {
  int input_idx;

  float signal_block_tmp[4] __attribute__ ((aligned (16)));

  __m128 signal_block __attribute__ ((aligned (16)));

  __m128 prod __attribute__ ((aligned (16)));
  __m128 acc __attribute__ ((aligned (16)));

  for(int i = 0; i < input_len; i += 4) {

    // Zero the accumulator.
    // Clears the four single-precision, floating-point values.
    acc = _mm_setzero_ps();

    // After this loop, we have computed 4 output samples for the price of one.
    for(int k = 0; k < trx_filter_length; k++) {

      input_idx = i-k;

      if(input_idx >= 0) {
        // Loads four single-precision, floating-point values.
        signal_block = _mm_loadu_ps(input + input_idx);
      } else {
        bzero(signal_block_tmp, 4*sizeof(float));
        for(int j = -1*input_idx; j < 4; j++) {
          signal_block_tmp[j] = input[j+input_idx];
        }
        // Loads four single-precision, floating-point values.
        signal_block = _mm_load_ps(signal_block_tmp);
      }

      // Multiplies the four single-precision, floating-point values of a and b.
      prod = _mm_mul_ps(kernel[k], signal_block);

      // Accumulate the 4 parallel values.
      acc = _mm_add_ps(acc, prod);

      //After this index there is no point in doing the MAC calculation as the samples are zero.
      if(input_idx == -3) {
        break;
      }
    }
    // Stores four single-precision, floating-point values.
    _mm_storeu_ps(output+i, acc);
  }
}

void trx_filter_create_tx_simd_kernel_mm256(uint32_t bw_idx) {
  trx_filter_create_simd_kernel_mm256(bw_idx, tx_kernel_mm256);
}

void trx_filter_create_rx_simd_kernel_mm256(uint32_t bw_idx) {
  trx_filter_create_simd_kernel_mm256(bw_idx, rx_kernel_mm256);
}

void trx_filter_init_coeffs(uint32_t bw_idx) {
   // Use the specified filter order.
   switch(trx_filter_length) {
      case 65:
         trx_filter_coeffs = trx_filter_coeffs_64[bw_idx];
         break;
      case 129:
         trx_filter_coeffs = trx_filter_coeffs_128[bw_idx];
         break;
      case 257:
         trx_filter_coeffs = trx_filter_coeffs_256[bw_idx];
         break;
      case 513:
         trx_filter_coeffs = trx_filter_coeffs_512[bw_idx];
         break;
      default:
         printf("Undefined filter order!!!!\n");
         exit(-1);
   }
   TRX_FILTER_PRINT("Filter with length: %d for BW: %d is initialized.\n",trx_filter_length,bw_idx);
}

uint32_t trx_filter_get_filter_length() {
   return trx_filter_length;
}

uint32_t trx_filter_get_order(uint32_t filter_idx) {
   uint32_t filter_order;
   switch(filter_idx) {
      case 1:
         filter_order = 64;
         break;
      case 2:
         filter_order = 128;
         break;
      case 3:
         filter_order = 256;
         break;
      case 4:
         filter_order = 512;
         break;
      default:
         printf("Undefined filter order!!!!\n");
         exit(-1);
   }
   return filter_order;
}

// Set global variable with filter length.
void trx_filter_init_filter_length(uint32_t filter_idx) {
   // Use the specified filter order.
   switch(filter_idx) {
      case 1:
         trx_filter_length = 65;
         break;
      case 2:
         trx_filter_length = 129;
         break;
      case 3:
         trx_filter_length = 257;
         break;
      case 4:
         trx_filter_length = 513;
         break;
      default:
         printf("Undefined filter index!!!!\n");
         exit(-1);
   }
   TRX_FILTER_PRINT("Filter length: %d\n",trx_filter_length);
}

void trx_filter_create_simd_kernel_mm256(uint32_t bw_idx, __m256 *kernel_mm256) {
   float kernel_block[8] __attribute__ ((aligned (32)));
   float tmp;

   // Use the correct filter order and BW.
   trx_filter_init_coeffs(bw_idx);

   // Reverse the kernel and repeat each value across a 4-vector
   for(int i = 0; i < trx_filter_length; i++) {
      tmp = trx_filter_coeffs[i];
      kernel_block[0] = tmp;
      kernel_block[1] = tmp;
      kernel_block[2] = tmp;
      kernel_block[3] = tmp;
      kernel_block[4] = tmp;
      kernel_block[5] = tmp;
      kernel_block[6] = tmp;
      kernel_block[7] = tmp;
      // Loads eight single-precision, floating-point values.
      kernel_mm256[i] = _mm256_load_ps(kernel_block);
   }
   // Allocate memory for input and output buffers.
   input_tmp = (cf_t*)srslte_vec_malloc((10*MAX_SUBFRAME_LEN)*sizeof(cf_t));
   bzero(input_tmp, (10*MAX_SUBFRAME_LEN)*sizeof(cf_t));
   output_tmp = (cf_t*)srslte_vec_malloc((10*MAX_SUBFRAME_LEN)*sizeof(cf_t));
   bzero(output_tmp, (10*MAX_SUBFRAME_LEN)*sizeof(cf_t));
}

void trx_filter_free_simd_kernel_mm256() {
  if(input_tmp!=NULL) {
    free(input_tmp);
  }
  if(output_tmp!=NULL) {
    free(output_tmp);
  }
}

void trx_filter_run_fir_tx_filter_sse_mm256_real(float *input, uint32_t input_len, float *output) {
 trx_filter_run_fir_filter_sse_mm256_real(input, input_len, tx_kernel_mm256, output);
}

void trx_filter_run_fir_rx_filter_sse_mm256_real(float *input, uint32_t input_len, float *output) {
 trx_filter_run_fir_filter_sse_mm256_real(input, input_len, rx_kernel_mm256, output);
}

void trx_filter_run_fir_filter_sse_mm256_real(float *input, uint32_t input_len, __m256 *kernel_mm256, float *output) {
  int input_idx;

  float signal_block_tmp[8] __attribute__ ((aligned (32)));

  __m256 signal_block __attribute__ ((aligned (32)));

  __m256 prod __attribute__ ((aligned (32)));
  __m256 acc __attribute__ ((aligned (32)));

  for(int i = 0; i < input_len; i += 8) {

    // Zero the accumulator.
    // Clears the eight single-precision, floating-point values.
    acc = _mm256_setzero_ps();

    // After this loop, we have computed 8 output samples for the price of one.
    for(int k = 0; k < trx_filter_length; k++) {

      input_idx = i-k;

      if(input_idx >= 0) {
        // Loads eight single-precision, floating-point values.
        signal_block = _mm256_loadu_ps(input + input_idx);
      } else {
        bzero(signal_block_tmp, 8*sizeof(float));
        for(int j = -1*input_idx; j < 8; j++) {
          signal_block_tmp[j] = input[j+input_idx];
        }
        // Loads eight single-precision, floating-point values.
        signal_block = _mm256_load_ps(signal_block_tmp);
      }

      // Multiplies the eight single-precision, floating-point values of a and b.
      prod = _mm256_mul_ps(kernel_mm256[k], signal_block);

      // Accumulate the 8 parallel values.
      acc = _mm256_add_ps(acc, prod);

      //After this index there is no point in doing the MAC calculation as the samples are zero.
      if(input_idx == -7) {
        break;
      }
    }
    // Stores eight single-precision, floating-point values.
    _mm256_storeu_ps(output+i, acc);
  }
}

void trx_filter_run_fir_tx_filter_sse_mm256_complex(cf_t *input_complex, uint32_t input_len, cf_t *output_complex) {
  trx_filter_run_fir_filter_sse_mm256_complex(input_complex, input_len, tx_kernel_mm256, tx_signal_block, output_complex);
}

void trx_filter_run_fir_rx_filter_sse_mm256_complex(cf_t *input_complex, uint32_t input_len, cf_t *output_complex) {
  trx_filter_run_fir_filter_sse_mm256_complex(input_complex, input_len, rx_kernel_mm256, rx_signal_block, output_complex);
}

void trx_filter_run_fir_filter_sse_mm256_complex(cf_t *input_complex, uint32_t input_len, __m256 *kernel_mm256, __m256 *signal_block, cf_t *output_complex) {
  int input_idx, n = 0, blk_cnt = 3;

  __attribute__ ((aligned (32))) float *input = (float*)input_complex;
  __attribute__ ((aligned (32))) float *output = (float*)output_complex;

  float signal_block_tmp[8] __attribute__ ((aligned (32)));

  __m256 prod __attribute__ ((aligned (32)));
  __m256 acc __attribute__ ((aligned (32)));

  for(int i = 0; i < 2*input_len; i += 8) {
    // Clears the eight single-precision, floating-point values, i.e., zeros the accumulator.
    acc = _mm256_setzero_ps();
    // After this loop, we have computed 8 output samples for the price of one.
    for(int k = 0; k < trx_filter_length; k++) {
      // Increment the counter which points to the start of the next block of 8 samples.
      input_idx = 2*(n-k);
      // If k is less than 4 we store the data samples, otherwise it was already stored in the previous run.
      if(k < 4) {
        if(input_idx >= 0) {
          // Loads eight single-precision, floating-point values.
          signal_block[blk_cnt] = _mm256_loadu_ps(input + input_idx);
        } else {
          bzero(signal_block_tmp, SIZE_OF_8_FLOATS);
          memcpy(&signal_block_tmp[(-1*input_idx)], input, (8+input_idx)*sizeof(float));
          // Loads eight single-precision, floating-point values.
          signal_block[blk_cnt] = _mm256_load_ps(signal_block_tmp);
        }
      }
      // Multiplies the eight single-precision, floating-point values of a and b.
      prod = _mm256_mul_ps(kernel_mm256[k], signal_block[blk_cnt]);
      // Accumulate the 8 parallel values.
      acc = _mm256_add_ps(acc, prod);
      // Decrement the counter so that we access the next block of data samples.
      blk_cnt--;
      // After this index there is no point in doing the MAC calculation as the samples are zero after this position.
      if(input_idx == -6) {
        break;
      }
    }
    // Stores eight single-precision, floating-point values.
    _mm256_storeu_ps(output+i, acc);
    // Increment the time sample index.
    n += 4;
    // Increament the counter used to keep data samples for reuse.
    blk_cnt = n + 3;
  }
}

void trx_filter_load_tx_simd_kernel_mm256(float *coeffs, uint32_t filter_size) {
  trx_filter_load_simd_kernel_mm256(coeffs, filter_size, tx_kernel_mm256);
}

void trx_filter_load_rx_simd_kernel_mm256(float *coeffs, uint32_t filter_size) {
  trx_filter_load_simd_kernel_mm256(coeffs, filter_size, rx_kernel_mm256);
}

void trx_filter_load_simd_kernel_mm256(float *coeffs, uint32_t filter_size, __m256 *kernel_mm256) {
  float kernel_block[8] __attribute__ ((aligned (32)));
  float tmp __attribute__ ((aligned (32)));

  // Reverse the kernel and repeat each value across a 4-vector
  for(int i = 0; i < filter_size; i++) {
    tmp = coeffs[i];
    kernel_block[0] = tmp;
    kernel_block[1] = tmp;
    kernel_block[2] = tmp;
    kernel_block[3] = tmp;
    kernel_block[4] = tmp;
    kernel_block[5] = tmp;
    kernel_block[6] = tmp;
    kernel_block[7] = tmp;
    // Loads eight single-precision, floating-point values.
    kernel_mm256[i] = _mm256_load_ps(kernel_block);
  }
}

void trx_filter_run_fir_tx_filter_sse_mm256_complex2(cf_t *input_complex, uint32_t input_len, uint32_t filter_size, cf_t *output_complex) {
  trx_filter_run_fir_filter_sse_mm256_complex2(input_complex, input_len, tx_kernel_mm256, filter_size, output_complex);
}

void trx_filter_run_fir_rx_filter_sse_mm256_complex2(cf_t *input_complex, uint32_t input_len, uint32_t filter_size, cf_t *output_complex) {
  trx_filter_run_fir_filter_sse_mm256_complex2(input_complex, input_len, rx_kernel_mm256, filter_size, output_complex);
}

void trx_filter_run_fir_filter_sse_mm256_complex2(cf_t *input_complex, uint32_t input_len, __m256 *kernel_mm256, uint32_t filter_size, cf_t *output_complex) {
  int input_idx, n = 0;

  __attribute__ ((aligned (32))) float *input = (float*)input_complex;
  __attribute__ ((aligned (32))) float *output = (float*)output_complex;

  float signal_block_tmp[8] __attribute__ ((aligned (32)));

  __m256 signal_block __attribute__ ((aligned (32)));

  __m256 prod __attribute__ ((aligned (32)));
  __m256 acc __attribute__ ((aligned (32)));

  for(int i = 0; i < 2*input_len; i += 8) {

    // Zero the accumulator.
    // Clears the eight single-precision, floating-point values.
    acc = _mm256_setzero_ps();

    // After this loop, we have computed 8 output samples for the price of one.
    for(int k = 0; k < filter_size; k++) {

      input_idx = 2*(n-k);

      if(input_idx >= 0) {
        // Loads eight single-precision, floating-point values.
        signal_block = _mm256_loadu_ps(input + input_idx);
      } else {
        bzero(signal_block_tmp, SIZE_OF_8_FLOATS);
        memcpy(&signal_block_tmp[(-1*input_idx)], input, (8+input_idx)*sizeof(float));
        // Loads eight single-precision, floating-point values.
        signal_block = _mm256_load_ps(signal_block_tmp);
      }

      // Multiplies the eight single-precision, floating-point values of a and b.
      prod = _mm256_mul_ps(kernel_mm256[k], signal_block);

      // Accumulate the 8 parallel values.
      acc = _mm256_add_ps(acc, prod);

      // After this index there is no point in doing the MAC calculation as the samples are zero.
      if(input_idx == -6) {
        break;
      }
    }
    // Stores eight single-precision, floating-point values.
    _mm256_storeu_ps(output+i, acc);
    // Increment the time sample index.
    n += 4;
  }
}

void trx_filter_run_fir_tx_filter_sse_mm256_complex3(cf_t *input_complex, uint32_t input_len, cf_t *output_complex, uint32_t packet_cnt, uint32_t packets_to_tx) {
  trx_filter_run_fir_filter_sse_mm256_complex3(input_complex, input_len, tx_kernel_mm256, tx_signal_block, output_complex, packet_cnt, packets_to_tx);
}

void trx_filter_run_fir_rx_filter_sse_mm256_complex3(cf_t *input_complex, uint32_t input_len, cf_t *output_complex, uint32_t packet_cnt, uint32_t packets_to_tx) {
  trx_filter_run_fir_filter_sse_mm256_complex3(input_complex, input_len, rx_kernel_mm256, rx_signal_block, output_complex, packet_cnt, packets_to_tx);
}

void trx_filter_run_fir_filter_sse_mm256_complex3(cf_t *input_complex, uint32_t input_len, __m256 *kernel_mm256, __m256 *signal_block22, cf_t *output_complex, uint32_t packet_cnt, uint32_t packets_to_tx) {
  int input_idx, n = 0;
  uint32_t input_len_tmp;
  __m256 signal_block;

  __attribute__ ((aligned (32))) float *input = NULL;
  __attribute__ ((aligned (32))) float *output = NULL;

  if(packet_cnt == 1) {
    input = (float*)input_complex;
    input_len_tmp = input_len;
    output = (float*)output_complex;
  } else {
    memcpy(input_tmp+trx_filter_length, input_complex, input_len*sizeof(cf_t));
    input = (float*)input_tmp;
    input_len_tmp = input_len+trx_filter_length;
    output = (float*)output_tmp;
  }

  float signal_block_tmp[8] __attribute__ ((aligned (32)));

  __m256 prod __attribute__ ((aligned (32)));
  __m256 acc __attribute__ ((aligned (32)));

  for(int i = 0; i < 2*input_len_tmp; i += 8) {
    // Clears the eight single-precision, floating-point values, i.e., zeros the accumulator.
    acc = _mm256_setzero_ps();
    // After this loop, we have computed 8 output samples for the price of one.
    for(int k = 0; k < trx_filter_length; k++) {
      // Increment the counter which points to the start of the next block of 8 samples.
      input_idx = 2*(n-k);
      if(input_idx >= 0) {
        // Loads eight single-precision, floating-point values.
        signal_block = _mm256_loadu_ps(input + input_idx);
      } else {
        bzero(signal_block_tmp, SIZE_OF_8_FLOATS);
        memcpy(&signal_block_tmp[(-1*input_idx)], input, (8+input_idx)*sizeof(float));
        // Loads eight single-precision, floating-point values.
        signal_block = _mm256_load_ps(signal_block_tmp);
      }
      // Multiplies the eight single-precision, floating-point values of a and b.
      prod = _mm256_mul_ps(kernel_mm256[k], signal_block);
      // Accumulate the 8 parallel values.
      acc = _mm256_add_ps(acc, prod);
      // After this index there is no point in doing the MAC calculation as the samples are zero after this position.
      if(input_idx == -6) {
        break;
      }
    }
    // Stores eight single-precision, floating-point values.
    _mm256_storeu_ps(output+i, acc);
    // Increment the time sample index.
    n += 4;
  }

  // Copy last samples from current packet to be used with the next packet.
  if(packets_to_tx > 1 && packet_cnt != packets_to_tx) {
    memcpy(input_tmp, input_complex+(input_len-trx_filter_length), trx_filter_length*sizeof(cf_t));
  }

  if(packet_cnt >= 2) {
    memcpy(output_complex, output+(2*trx_filter_length), input_len*sizeof(cf_t));
  }
}

void trx_filter_run_fir_filter_sse_mm256_complex4(cf_t *input_complex, uint32_t input_len, __m256 *kernel_mm256, __m256 *signal_block, cf_t *output_complex, uint32_t packet_cnt, uint32_t packets_to_tx) {
  int input_idx, n = 0, blk_cnt = 3;
  uint32_t input_len_tmp;

  __attribute__ ((aligned (32))) float *input = NULL;
  __attribute__ ((aligned (32))) float *output = NULL;

  if(packet_cnt == 1) {
    input = (float*)input_complex;
    input_len_tmp = input_len;
    output = (float*)output_complex;
  } else {
    memcpy(input_tmp+trx_filter_length, input_complex, input_len*sizeof(cf_t));
    input = (float*)input_tmp;
    input_len_tmp = input_len+trx_filter_length;
    output = (float*)output_tmp;
  }

  float signal_block_tmp[8] __attribute__ ((aligned (32)));

  __m256 prod __attribute__ ((aligned (32)));
  __m256 acc __attribute__ ((aligned (32)));

  for(int i = 0; i < 2*input_len_tmp; i += 8) {
    // Clears the eight single-precision, floating-point values, i.e., zeros the accumulator.
    acc = _mm256_setzero_ps();
    // After this loop, we have computed 8 output samples for the price of one.
    for(int k = 0; k < trx_filter_length; k++) {
      // Increment the counter which points to the start of the next block of 8 samples.
      input_idx = 2*(n-k);
      // If k is less than 4 we store the data samples, otherwise it was already stored in the previous run.
      if(k < 4) {
        if(input_idx >= 0) {
          // Loads eight single-precision, floating-point values.
          signal_block[blk_cnt] = _mm256_loadu_ps(input + input_idx);
        } else {
          bzero(signal_block_tmp, SIZE_OF_8_FLOATS);
          memcpy(&signal_block_tmp[(-1*input_idx)], input, (8+input_idx)*sizeof(float));
          // Loads eight single-precision, floating-point values.
          signal_block[blk_cnt] = _mm256_load_ps(signal_block_tmp);
        }
      }
      // Multiplies the eight single-precision, floating-point values of a and b.
      prod = _mm256_mul_ps(kernel_mm256[k], signal_block[blk_cnt]);
      // Accumulate the 8 parallel values.
      acc = _mm256_add_ps(acc, prod);
      // Decrement the counter so that we access the next block of data samples.
      blk_cnt--;
      // After this index there is no point in doing the MAC calculation as the samples are zero after this position.
      if(input_idx == -6) {
        break;
      }
    }
    // Stores eight single-precision, floating-point values.
    _mm256_storeu_ps(output+i, acc);
    // Increment the time sample index.
    n += 4;
    // Increament the counter used to keep data samples for reuse.
    blk_cnt = n + 3;
  }

  // Copy last samples from current packet to be used with the next packet.
  if(packets_to_tx > 1 && packet_cnt != packets_to_tx) {
    memcpy(input_tmp, input_complex+(input_len-trx_filter_length), trx_filter_length*sizeof(cf_t));
  }

  if(packet_cnt >= 2) {
    memcpy(output_complex, output+(2*trx_filter_length), input_len*sizeof(cf_t));
  }
}

#if 0
int FirSSE( cf_t* pSrc, cf_t* pOutput, int nSize, float pCoff, int iTaps, cf_t* pTempBuf) {
   _asm {
      mov esi, pSrc;
      mov ecx, nSize;
      mov ebx, pOutput;
      outerloop:
      mov edx, pCoff;
      mov edi, pTempBuf;

      ;// load samples 4-I and 4-Q
      movdqa xmm0, [esi];

      ; // result_0
      movdqa xmm4, xmm0;
      pmullw xmm4, [edx];
      paddsw xmm4, [edi];
      ; // result_1
      movdqa xmm5, xmm0;
      pmullw xmm5, [edx + 16];
      paddsw xmm5, [edi + 16];
      ; // result_2
      movdqa xmm6, xmm0;
      pmullw xmm6, [edx + 32];
      paddsw xmm6, [edi + 32];
      ; // result_3
      movdqa xmm7, xmm0;
      pmullw xmm7, [edx + 48];
      paddsw xmm7, [edi + 48];

      ; // xmm4, xmm5, xmm6, xmm7 contains output
      ; // perform shuffle and horizontal additions
      movdqa xmm1, xmm4;
      punpckldq xmm1, xmm6;
      punpckhdq xmm4, xmm6;
      paddsw xmm4, xmm1;

      movdqa xmm1, xmm5;
      punpckldq xmm1, xmm7;
      punpckhdq xmm5, xmm7;
      paddsw xmm5, xmm1;

      movdqa xmm1, xmm4;
      punpckldq xmm1, xmm5;
      punpckhdq xmm4, xmm5;
      paddsw xmm4, xmm1;

      ; // output
      ; // additional instructions may be added to
      ; // adjust the sample orders
      movdqa [ebx], xmm4;

      ; // update temp buffers
      mov eax, iTaps;
      innerloop:
      movdqa xmm1, xmm0;
      pmullw xmm1, [edx + 64];
      paddsw xmm1, [edi + 64];
      movdqa [edi], xmm1;

      add edx, 16;
      add edi, 16;
      dec eax;
      jnz innerloop;

      ;// advance to next sample group
      add esi, 16;
      add ebx, 16;
      sub ecx, 4;
      jg outerloop;
   }
}
#endif
